Sklearn——5折交叉验证评估模型性能

学习资料:
sklearn 中文文档:
http://www.scikitlearn.com.cn/
pandas cookbook:https://github.com/iamseancheney/pythonbooks/blob/master/Pandas%20Cookbook%20%EF%BC%8DTheodore%20Petrou.pdf

train_test_split函数:划分训练集与测试集
Sklearn——5折交叉验证评估模型性能_第1张图片
random_state:该组随机数的编号,在重复试验的时候,保证得到一组一样的随机数(划分相同)。种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。改变random_state值的,会使模型的性能改变。

LogisticRegression():参数说明
SVM.SVC():参数说明

惩罚系数C越大,说明越不能容忍出现误差,但容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差。

交叉验证优点:交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。还可以从有限的数据中获取尽可能多的有效信息。
得分cross_val_score(模型, 所有数据 , 所有数据的标签,折数cv)
代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
#加载数据集
df = pd.read_csv('D:/cross.csv')
feat = df.iloc[0:,:9]            #行号索引      [行选择,列选择]
class_num = df.loc[:,'Class']    #行标签索引    [行标签,列标签] 选取Class列所有数据
#数据处理
X = feat.values
y = class_num.values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/5, random_state= 12)

#标准化——原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。
#消除奇异样本数据导致的不良影响:奇异样本数据的存在会引起训练时间增大,同时也可能导致无法收敛。
sd = StandardScaler()
X_train = sd.fit_transform(X_train)
X_test = sd.fit_transform(X_test)

Lg = LogisticRegression(C = 100.0, random_state=1)  #逻辑回归  惩罚系数C 随机数
Lg.fit(X_train, y_train)    #训练模型
y_pre = Lg.predict(X_test)  #结果预测
Lg_scores = cross_val_score(Lg, X_train, y_train, cv=5)

print('LogisticRegression:\n  准确率: %.2f' % accuracy_score(y_test, y_pre))
print("  Scores:%s" %Lg_scores)
print("  s:",Lg_scores.mean())

svm = SVC(kernel = 'linear',C = 10.0,random_state=1)    #SVM 核函数为线性核:linear
svm.fit(X_train, y_train)
y_pre1 = svm.predict(X_test)
svm_scores = cross_val_score(svm, X_train, y_train, cv=5)

print('SVM:\n  准确率: %.4f' % accuracy_score(y_test, y_pre1))
print("  Scores:%s" %svm_scores)
print("  s:",svm_scores.mean())

结果:

LogisticRegression:
  准确率: 0.98
  Scores:[0.9625  0.94375 0.95    0.975   0.975  ]
  s: 0.96125
SVM:
  准确率: 0.9900
  Scores:[0.975   0.95625 0.95    0.96875 0.975  ]
  s: 0.9649999999999999

准确率与得分有差距的原因:之前就把数据分为了训练数据和测试数据,在训练数据中做了5 fold的划分,而模型没有见过test data,有一定程度的过拟合。

数据集:
链接:https://pan.baidu.com/s/1cxiEbYpuhs5-OE9ZpnoouQ
提取码:eh0a

你可能感兴趣的:(机器学习)