本文最后更新于:2023年3月1日 上午
sklearn
全称 scikit-learn
,是简单易行的机器学习工具。可处理以下任务板块:

1. 数据集
内置数据集
sklearn.datasets
内置部分数据集
拿取数据集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from sklearn.datasets import load_iris """ return_X_y=True 因变量和自变量独立导出 """
data = load_iris(return_X_y=False) print(type(data))
print(data.keys())
X = data.data y = data.target
X, y = load_iris(return_X_y=True) print(X.shape, y.shape, type(X))
|
2. 机器学习模型
基本概念
在sklearn
中用来训练数据的机器学习模型,是估计器 (estimator)
-
创建模型
1 2
| from sklearn.linear_model import LinearRegression model = LinearRegression(normalize=True)
|
-
调节超参数
1 2 3 4 5 6
| normalize=True n_clusters=3
model.normalize model.n_clusters
|
-
训练集拟合
1 2 3 4 5 6 7
| model.fit(X_train, y_train )
model.fit(X_train)
model.coef_ model.labels_
|
在估计器上延展出预测的功能,是预测器 (predictor)
1 2 3 4 5 6 7 8 9 10 11 12
| model.predict(X_test): model.predict(X_train):
y_pred = model.predict( X_test ) p_pred = model.predict_proba( X_test ) print( y_test, '\n' ) print( y_pred, '\n' ) print( p_pred ) model.score( X_test, y_test ) model.decision_function( X_test )
|
在sklearn
中用来数据预处理的机器学习模型,是转换器 (transfor)
学习模型
回归
分类
预处理模型
数据变换
归一化
1 2 3
| from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() scaler.fit_transform(data)
|
标准化

1 2 3
| from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit_transform(data)
|
特征组合
sklearn.preprocessing.PolynomialFeatures
用来生成多项式特征,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from sklearn.preprocessing import PolynomialFeatures
'''创建拟合''' pf = PolynomialFeatures(2) pf.fit_transform(df2)
pf = PolynomialFeatures(3) pf.fit_transform(df2)
pf = PolynomialFeatures(degree=3, interaction_only=True, include_bias=False) pf.fit_transform(df3)
'''属性查询''' model.powers_
|
3. 模型验证
交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证重复地使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。
- 如果数据样本量小于一万条,我们采用交叉验证来训练优化选择模型
- 如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。
简单交叉验证
随机的将样本数据分为训练集、测试集两部分 (train_test_split) ,训练集来训练模型,在测试集上验证模型及参数。
1 2 3 4 5
| from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.30,random_state=42)
|
K折交叉验证
K折交叉验证 (K-Folder Cross Validation) 会把样本数据随机的分成K份,每次随机的选择K-1份作为训练集,剩下的1份做测试集,重复K次。
1 2 3 4 5 6 7 8
| from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score
kf = KFold(n_splits=10)
scores = cross_val_score(estimator=<估计器>,X,y,cv=kf,scoring=<评价指标>)
|
4. 评价指标
<estimator>
的score
方法:<estimator>.score()
scoring
参数:使用cross-validation的进行模型验证时,其函数内置scoring
参数,见第一列
Metric
函数:调用metrics模块函数,见第二列
scoring para |
meaning |
function |
'accuracy' |
分类,准确率 |
from sklearn.metrics import accuracy_score
accuracy_score(y_true, y_pred) |
'neg_mean_squared_error' |
回归,MSE的负值
 |
from sklearn.metrics import mean_squared_error
mean_squared_error(y_true, y_pred) |
‘r2’ |
回归,R方
 |
from sklearn.metrics import r2_score
r2_score(y_true, y_pred) |
5. 工作流
按顺序组合估计器 (estimator) / 预测器 (predictor) / 转换器 (transfor) 形成流水线,用以处理重复工作
1 2 3 4 5 6 7 8 9 10 11 12 13
| '''创建''' from sklearn.pipeline import Pipeline from sklearn.pipeline import make_pipeline
pipe = Pipeline([ ("<别名1>", <estimator1>), ("<别名2>", <estimator2>), ... ... ]) pipe = make_pipeline(<estimator1>, <estimator2>, ...)
'''查看各估计器详情''' pipe.steps[1][1].coef_
|
网格搜索
自动调参的工具,常结合pipeline
使用
1
| from sklearn.model_selection import GridSearchCV
|
参考资料