train_test_split
是 sklearn.model_selection
模块里的一个函数,它的主要用途是把数据集划分为训练集和测试集。在机器学习中,为了评估模型的泛化能力,通常需要将数据集分成两部分:一部分用于训练模型(训练集),另一部分用于测试模型的性能(测试集)。train_test_split
函数可以方便地完成这个划分任务。
函数原型
sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
参数解释
*arrays
:这是一个可变参数,代表要划分的数组,可以是特征矩阵X
、目标标签y
等。这些数组的行数必须相同,因为它们代表相同的样本。test_size
:浮点数、整数或者None
,默认值是None
。若为浮点数,其范围应在 0.0 到 1.0 之间,表示测试集占总样本的比例;若为整数,则表示测试集的样本数量;若为None
,则会根据train_size
来确定,若train_size
也为None
,则test_size
会被设为 0.25。train_size
:浮点数、整数或者None
,默认值是None
。若为浮点数,范围应在 0.0 到 1.0 之间,表示训练集占总样本的比例;若为整数,则表示训练集的样本数量。random_state
:整数、RandomState
实例或者None
,默认值是None
。它作为随机数生成器的种子,保证每次划分的结果可重复。若为None
,则每次划分的结果会不同。shuffle
:布尔值,默认值是True
。若为True
,则在划分前会对数据集进行洗牌;若为False
,则直接按顺序划分。stratify
:数组或者None
,默认值是None
。若不为None
,则会按照这个数组的类别分布进行分层抽样,保证训练集和测试集中各类别的比例与原数据集一致,这在处理不平衡数据集时非常有用。
返回值
返回值是一个元组,元组中的元素数量是传入 arrays
参数数量的两倍,依次为训练集的各个数组和测试集的各个数组。例如,若传入 X
和 y
两个数组,返回值为 (X_train, X_test, y_train, y_test)
。
示例代码
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 生成一个分类数据集
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=0, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
在这个示例中,首先使用 make_classification
生成一个分类数据集,然后使用 train_test_split
函数将数据集划分为训练集和测试集,其中测试集占总样本的 20%。接着使用逻辑回归模型对训练集进行训练,并在测试集上进行预测,最后计算模型的准确率。
注意:本文归作者所有,未经作者允许,不得转载