train_sizes,train_loss,test_loss=learn_curve
(输入: (estimator : 你用的分类器。
train_sizes: 把数据分成几段(默认是三段)
X : 输入的feature,numpy类型
y : 输入的target vector
scoring:衡量loss的方式(平均方差还是准确率)
ylim : tuple格式的(ymin, ymax), 设定图像中纵坐标的最低点和最高点
cv : 做cross-validation的时候,数据分成的份数,其中一份作为cv集,其余n-1份作为training(默认为3份)
n_jobs : 并行的的任务数(默认1))
输出:(train_sizes_abs :训练样本数
train_scores:训练集上准确率
test_scores:交叉验证集上的准确率)
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 = load_digits()
X = digits.data
y = digits.target
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()
继续上一个例子,并稍作小修改即可画出图形。这次我们来验证SVC
中的一个参数 gamma
在什么范围内能使 model 产生好的结果. 以及过拟合和 gamma
取值的关系.
train_score,test_score=validation_curve(
estimator, X, y, param_name, param_range, cv=None, scoring=None, n_jobs=1, pre_dispatch="all", verbose=0
estimator:选择的分类器
X:测试数据
y:标签数据
param_name:分类器中的参数
raram_range:所要调的参数的范围
cv:划分的数量
scoring:测量score的方式
)
from sklearn.learning_curve import validation_curve #validation_curve模块 from sklearn.datasets import load_digits from sklearn.svm import SVC import matplotlib.pyplot as plt import numpy as np #digits数据集 digits = load_digits() X = digits.data y = digits.target #建立参数测试集 param_range = np.logspace(-6, -2.3, 5) #使用validation_curve快速找出参数对模型的影响 train_loss, test_loss = validation_curve( SVC(), X, y, param_name='gamma', param_range=param_range, cv=10, scoring='mean_squared_error') #平均每一轮的平均方差 train_loss_mean = -np.mean(train_loss, axis=1) test_loss_mean = -np.mean(test_loss, axis=1) #可视化图形 plt.plot(param_range, train_loss_mean, 'o-', color="r", label="Training") plt.plot(param_range, test_loss_mean, 'o-', color="g", label="Cross-validation") plt.xlabel("gamma") plt.ylabel("Loss") plt.legend(loc="best") plt.show()