模型评价的目的:通过模型评价,我们知道当前训练模型的好坏,泛化能力如何。
train_test_split
在分类问题中,我们通常通过对训练集进行train_test_split,划分成train 和test 两部分,其中train用来训练模型,test用来评估模型,模型通过fit方法从train数据集中学习,然后调用score方法在test集上进行评估,打分;从分数上我们可以知道 模型当前的训练水平如何。
"""
train_test_split 验证方法
"""
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
cancer = load_breast_cancer()
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)
# ml .fit方法进行学习
logreg = LogisticRegression().fit(X_train,y_train)
print("Test set score: {:.2f}".format(logreg.score(X_test, y_test)))
result:
Test set score: 0.96
train_test_split(train_data, train_target,random_state=0) 参数解答
train_data: 被划分的样本特征集
train_target:被划分的标签 都是array形式
random_state: 随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。
比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
train_test_split 这种方法只进行了一次划分,数据结果具有偶然性,如果在某次划分中,训练集里全是容易学习的数据, 测试集里全是复杂的数据,这样就会导致最终的结果不尽如意;反之,亦是如此。
K-Fold Cross-validation k折交叉验证
简言之,就是进行多次train_test_split划分;每次划分时,在不同的数据集上进行训练、测试评估,从而得出一个评价结果;如果是5折交叉验证,意思就是在原始数据集上,进行5次划分,每次划分进行一次训练、评估,最后得到5次划分后的评估结果,一般在这几次评估结果上取平均得到最后的评分。k-fold cross-validation ,其中,k一般取5或10。
"""
K-Fold 交叉验证方法
"""
from sklearn.model_selection import cross_val_score,KFold
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
cancer = load_breast_cancer()
logreg = LogisticRegression()
# 进行交叉验证得分计算 默认是3折通过cv参数改变 CV>=2,默认评价函数scoring为'f1_macro',可以修改
kf = KFold(n_splits=