scikit-learn是基于 Python 语言的机器学习工具,简称sklearn。它是SciPy的扩展,建立在Numpy和matplolib库的基础上。sklearn包括了分类,回归,降维和聚类等四大机器学习算法,还包括了特征提取,数据处理和模型评估者三大模块。具有如下特点:
- Simple and efficient tools for predictive data analysis
- Accessible to everybody, and reusable in various contexts
- Built on NumPy, SciPy, and matplotlib
- Open source, commercially usable - BSD license
机器学习的开发步骤
机器学习的开发基本分为六个步骤,1)获取数据,2)数据处理,3)特征工程,4)模型训练(选择机器学习算法),5)模型评估,6)应用。
相应的使用sklearn库的一般过程如下:
1、引入需要训练的数据,既可以加载sklearn自带数据集,也可以通过相应方法进行构造,或加载具体任务的现有数据。
2、选择适合具体任务的机器学习算法,并进行训练,训练时可以调参。
3、使用准确率或方差等进行模型评估,可以通过matplolib库方法直观的图形化展示数据。
4、保存已训练好的模型,再次使用(应用)时不必重新训练。
1 加载数据
Sklearn内置有一些小型标准数据集(sklearn.datasets.load_xxx),中文官网翻译为玩具数据集,下面简要介绍数据集名称、加载方法及适用任务等。
- 波士顿房价数据集load_boston()适用于回归任务,包含了506个样本。
- 乳腺癌数据集load_breast_cancer()适用于二分类任务,包含了569个样本。
- 鸢尾花数据集load_iris()适用于三分类任务,包含了150个样本。
- 手写数字数据集load_digits()适用于多分类任务,包含了1797个样本。
- 红酒数据集load_wine()适用于分类任务,包含了178个样本,代表了红酒的三个档次(分别有59,71,48个样本)。
- 糖尿病数据集load_diabetes()适用于回归任务,包含了442个样本。值得注意的是,样本10个特征中的每个特征都已经被处理成0均值,方差归一化的特征值。
- 体能训练数据集load_linnerud()经典的用于多变量回归任务的数据集,其内部包含两个小数据集:Excise是对3个训练变量的20次观测(体重,腰围,脉搏),physiological是对3个生理学变量的20次观测(引体向上,仰卧起坐,立定跳远)。
除了以上自带的数据集,sklearn也支持样本生成器生成数据集sklearn.datasets.make_xxx
示例:加载波士顿房价数据集
from sklearn import datasets
from sklearn.model_selection import train_test_split
# 加载数据
boston = datasets.load_boston()
x = boston['data']
y = boston['target']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=37, test_size=0.2)
2 选择机器学习算法
2.1、选择正确的评估器,流程图如下:
备注:官网流程图中的绿色框带有链接,网址【https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html】
2.2、使用sklearn开发的典型代码,如下:
import sklearn.linear_model as sl
# 创建模型,线性回归
model = sl.LinearRegression()
# 拟合模型,训练模型
model.fit(X_train, y_train)
# 模型预测:将测试样本带入模型求出预测值
pred_y = model.predict(X_test)
# 为模型进行打分,回归问题:以R2参数为标准 分类问题:以准确率为标准
model.score(X_train, y_train)
3 模型评估
sklearn.metrics提供了计算模型误差的几个常用算法
import sklearn.metrics as sm
print('平均绝对值误差:', sm.mean_absolute_error(y_test, pred_y))
print('平均平方误差:', sm.mean_squared_error(y_test, pred_y))
print('中位绝对值误差:', sm.median_absolute_error(y_test, pred_y))
print('R2得分:', sm.r2_score(y_test, pred_y))
4 模型保存,及应用
# 将训练好的模型对象保存到磁盘文件中
with open('./sk_linear.pkl', 'wb') as f:
pickle.dump(model, f)
# 从磁盘文件中加载模型对象
with open('./sk_linear.pkl', 'rb') as f:
model = pickle.load(f)
# 输入新样本x预测输出
pred_y = model.predict(x)