机器学习练习(三)——交叉验证Cross-validation
2017-08-30 11:04
901 查看
一、选择正确的Model基础验证法
二、选择正确的Model交叉验证法(Cross-validation)
交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。
三、准确率和平均方差
一般来说
从图中可以得知,选择
fitting)的问题。
一般来说
由图可以得知,平均方差越低越好,因此选择
四、由学习曲线(Learning Curve)来检视过拟合(Overfitting)的问题
分别为其手写体对应的8×8像素表示,每个特征取值0~16。
选择平均方差检视模型效能
样本由小到大分成5轮检视学习曲线
from sklearn.datasets import load_iris # iris数据集 from sklearn.model_selection import train_test_split # 分割数据模块 from sklearn.neighbors import KNeighborsClassifier # K最近邻(kNN,k-NearestNeighbor)分类算法 #加载iris数据集 iris = load_iris() X = iris.data y = iris.target #分割数据并 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4) #建立模型 knn = KNeighborsClassifier() #训练模型 knn.fit(X_train, y_train) #将准确率打印出 print(knn.score(X_test, y_test)) # 0.973684210526 基础验证的准确率
二、选择正确的Model交叉验证法(Cross-validation)
交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。
from sklearn.cross_validation import cross_val_score # K折交叉验证模块 #使用K折交叉验证模块 scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy') #将5次的预测准确率打印出 print(scores) # [ 0.96666667 1. 0.93333333 0.96666667 1. ] #将5次的预测准确平均率打印出 print(scores.mean()) # 0.973333333333
三、准确率和平均方差
一般来说
准确率(accuracy)会用于判断分类(Classification)模型的好坏。
import matplotlib.pyplot as plt #可视化模块 #建立测试参数集 k_range = range(1, 31) k_scores = [] #藉由迭代的方式来计算不同参数对模型的影响,并返回交叉验证后的平均准确率 for k in k_range: knn = KNeighborsClassifier(n_neighbors=k) scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy') k_scores.append(scores.mean()) #可视化数据 plt.plot(k_range, k_scores) plt.xlabel('Value of K for KNN') plt.ylabel('Cross-Validated Accuracy') plt.show()
从图中可以得知,选择
12~18的
k值最好。高过
18之后,准确率开始下降则是因为过拟合(Over
fitting)的问题。
一般来说
平均方差(Mean squared error)会用于判断回归(Regression)模型的好坏。
import matplotlib.pyplot as plt k_range = range(1, 31) k_scores = [] for k in k_range: knn = KNeighborsClassifier(n_neighbors=k) loss = -cross_val_score(knn, X, y, cv=10, scoring='mean_squared_error') k_scores.append(loss.mean()) plt.plot(k_range, k_scores) plt.xlabel('Value of K for KNN') plt.ylabel('Cross-Validated MSE') plt.show()
由图可以得知,平均方差越低越好,因此选择
13~18左右的
K值会最好。
四、由学习曲线(Learning Curve)来检视过拟合(Overfitting)的问题
from sklearn.learning_curve import learning_curve #学习曲线模块 from sklearn.datasets import load_digits #digits数据集 from sklearn.svm import SVC #Support Vector Classifier import matplotlib.pyplot as plt #可视化模块 import numpy as np加载digits数据集,其包含的是手写体的数字,从0到9。数据集总共有1797个样本,每个样本由64个特征组成,
分别为其手写体对应的8×8像素表示,每个特征取值0~16。
digits = load_digits() X = digits.data y = digits.target观察样本由小到大的学习曲线变化, 采用K折交叉验证
cv=10,
选择平均方差检视模型效能
scoring='mean_squared_error',
样本由小到大分成5轮检视学习曲线
(10%, 25%, 50%, 75%, 100%):
train_sizes, train_loss, test_loss = learning_curve( SVC(gamma=0.001), X, y, cv=10, scoring='mean_squared_error', train_sizes=[0.1, 0.25, 0.5, 0.75, 1]) #平均每一轮所得到的平均方差(共5轮,分别为样本10%、25%、50%、75%、100%) train_loss_mean = -np.mean(train_loss, axis=1) test_loss_mean = -np.mean(test_loss, axis=1)可视化图形:
plt.plot(train_sizes, train_loss_mean, 'o-', color="r", label="Training") plt.plot(train_sizes, test_loss_mean, 'o-', color="g", label="Cross-validation") plt.xlabel("Training examples") plt.ylabel("Loss") plt.legend(loc="best") plt.show()
相关文章推荐
- 【机器学习】交叉验证和K-折交叉验证cross-validation and k-fold cross-validation
- 机器学习中的交叉验证(cross-validation)
- 【机器学习】交叉验证(cross-validation)
- 交叉验证 Cross-validation
- 交叉验证(Cross-validation)
- [数学理论]Cross-Validation(交叉验证)介绍
- python 利用sklearn.cross_validation的KFold构造交叉验证数据集
- 【scikit-learn】05:交叉验证 Cross-validation
- python机器学习-交叉验证(cross-vaildation)
- 交叉验证(Cross-validation)
- k-折交叉验证(k-fold crossValidation)
- Cross-validation 交叉验证与训练集测试集划分
- k-折交叉验证(k-fold crossValidation)
- K-折交叉验证(k-fold crossValidation)
- 交叉验证(cross_validation)
- 【机器学习】k-折交叉验证(k-fold cross-validation)
- 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集
- cross-validation 交叉验证
- 机器学习中的交叉验证(cross-validation)
- 交叉验证(Cross-Validation)和特征选择(Feature Selection)