1、交叉验证:评估估算器的表现
from sklearn.model_selection import train_test_split
可以很快地将实验数据集划分为任何训练集(training sets)和测试集(test sets)
X_train,X_test,y_train,y_test = train_test_split(data,target,test_size=0.4, random_state=0)
函数在进行训练的时候,由于在原数据集上使得训练器达到最好的状态,但在训练集上有可能出现过拟合状态,所以需要准备 “validation set(验证集)” ,使用训练器在验证集上对模型进行评估,当评估结果比较成功的时候,就在测试集上进行最后的评估。
通过交叉验证(cv)做模型的评估,不需要验证集。
实现方法:k-折交叉验证
k-折交叉验证将训练集划分为 k 个较小的集合,并且每一个 k 折都会遵循下面的过程:
- 将 k-1 份训练集子集作为 training data (训练集)训练模型,
- 将剩余的 1 份训练集子集作为验证集用于模型验证(也就是利用该数据集计算模型的性能指标,例如准确率)。
1.1. 计算交叉验证的指标
交叉验证函数:cross_val_score
>>> from sklearn.model_selection import cross_val_score
>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_val_score(clf, iris.data, iris.target, cv=5)
>>> scores
array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])
1.2.cross_validate 函数和多度量评估
>>> from sklearn.model_selection import cross_validate
>>> from sklearn.metrics import recall_score
>>> scoring = ['precision_macro', 'recall_macro']
>>> clf = svm.SVC(kernel='linear', C=1, random_state=0)
>>> scores = cross_validate(clf, iris.data, iris.target, scoring=scoring,
... cv=5)
>>> sorted(scores.keys())
['fit_time', 'score_time', 'test_precision_macro', 'test_recall_macro']
>>> scores['test_recall_macro']
array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])
注:scoring–取值
Classification(分类)–
metrics.accuracy_score
Clustering(聚类)–
metrics.v_measure_score
Regression(回归)–
metrics.mean_squared_error
1.3.K折交叉验证
sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)
参数:
参数说明:
n_splits:表示划分几等份
shuffle:在每次划分时,是否进行洗牌
①若为Falses时,其效果等同于random_state等于整数,每次划分的结果相同
②若为True时,每次划分的结果都不一样,表示经过洗牌,随机取样的
random_state:随机种子数
from sklearn.model_selection import KFold
...: import numpy as np
...: X = np.arange(24).reshape(12,2)
...: y = np.random.choice([1,2],12,p=[0.4,0.6])
kf = KFold(n_splits=5,shuffle=False)
for train_index , test_index in kf.split(X):
print('train_index:%s , test_index: %s ' %(train_index,test_index))
2、数据预处理
from sklearn import preprocessing
1、一般来说,机器学习算法受益于数据集的标准化,将原始特征向量更改为更适合机器学习模型的形式。如果数据集中存在一些离群值,那么稳定的缩放或转换更合适。
如果个别特征或多或少看起来不是很像标准正态分布(具有零均值和单位方差),那么它们的表现力可能会较差。
MinMaxScaler:
import sklearn
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_train
min_max_scaler = sklearn.preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
X_train_minmax
经过缩放后的数据具有零均值以及标准方差:
-
将特征缩放至特定范围内
一种标准化是将特征缩放到给定的最小值和最大值之间,通常在零和一之间,或者也可以将每个特征的最大绝对值转换至单位大小。可以分别使用 MinMaxScaler 和 MaxAbsScaler 实现。 -
缩放有离群值的数据
如果你的数据包含许多异常值,使用均值和方差缩放可能并不是一个很好的选择。这种情况下,你可以使用 robust_scale 以及 RobustScaler 作为替代品。它们对你的数据的中心和范围使用更有鲁棒性的估计。
3、模型评估: 量化预测的质量
3.1计算均方误差回归损失
sklearn.metrics.mean_squared_error(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)
参数:
参数:
y_true:真实值。
y_pred:预测值。
sample_weight:样本权值。
multioutput:多维输入输出,默认为’uniform_average’,计算所有元素的均方误差,返回为一个标量;也可选‘raw_values’,计算对应列的均方误差,返回一个与列数相等的一维数组。
y_true = [3, -1, 2, 7]
y_pred = [2, 0.0, 2, 8]
mean_squared_error(y_true, y_pred)
4、验证曲线: 绘制分数以评估模型
绘制单个超参数对训练分数和验证分数的影响,有时有助于发现该估计是否因为某些超参数的值 而出现过拟合或欠拟合。
validation_curve
5、 特征提取
类 DictVectorizer 可用于将标准的Python字典(dict)对象列表的要素数组转换为 scikit-learn 估计器使用的 NumPy/SciPy 表示形式。
类 DictVectorizer 实现了 “one-of-K” 或 “one-hot” 编码,用于分类(也称为标称,离散)特征。