scikit-learn简易入门

214 阅读3分钟

本文只讲scikit-learn的基础使用,不涉及有关机器学习的理论基础。

本文只涉及scikit-learn在监督式学习上的使用,所以相关的描述可能有失全面,请谅解。

scikit-learn是什么?

scikit-learn是一个开源(BSD协议)的机器学习库。

scikit-learn是最为常用的机器学习库之一。

它基于NumPySciPyPandasMatplotlib开发。

scikit-learn我使用的感觉比较爽,以致于其他的图我暂时就不学了,我非常推荐scikit-learn。

scikit-learn特点

  • 好用的数据集

scikit-learn自带了很多著名的数据集,可以直接用来教和学。

比如鸢尾花波士顿房价数据集。

  • 好用的一致性

对于各种机器学习算法,scikit-learn提供的API具有很高的一致性,对学习特别友好,容易一通百通。

  • 好用的示例代码

scikit-learn提供了大量的示例代码。

快速开始

安装

如果你安装了Anaconda,那么scikit-learn已经在Anaconda中自带,不用再安装。

手动安装scikit-learn也很简单:

执行以下命令:

pip install scikit-learn

也可以指定镜像来安装,比如指定清华镜像:

pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple

代码示例

阅读以下代码,将其跑起来感受一下就差不多了。

import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 直接从 scikit-learn 载入波士顿房价数据集
X, y = load_boston(return_X_y=True)

# 数据集切分:70% 用于训练,30% 用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 使用训练集来训练(拟合)
LR = LinearRegression().fit(X_train, y_train)
w = np.insert(LR.coef_, 0, LR.intercept_, axis=0)
with np.printoptions(precision=3, suppress=True):  # 设置输出格式
    print(f'w = {w}')

# 使用验证集来验证
acc = LR.score(X_test, y_test)
print(f"acc={acc}")

运行结果:

w = [ 37.937  -0.121   0.044   0.011   2.511 -16.231   3.859  -0.01   -1.5
   0.242  -0.011  -1.018   0.007  -0.487]
acc=0.6733825506400193

代码解释

线性回归的对应的超平面函数为:

y=wTx=w0+w1x1+w2x2++wnxny=\boldsymbol{w}^\mathrm{T}\boldsymbol{x}=w_0+w_1x_1+w_2x_2+\cdots+w_nx_n

LR.coef_对应的是w1w_1w2w_2,...,wnw_nLR.intercept_对应的是w0w_0

好用的数据集

链接:scikit-learn数据集

scikit-learn自带的数据集通过是sklearn.datasets导入。

scikit-learn可导入三种数据集:

  • 打包好的数据集。这些数据是随scikit-learn安装时,存储在本地的,通常数据量较小。这种数据集用sklearn.dataset.load_*的方式导入。
  • 分流下载的数据:这些数据本地没有,导入时才去下载。这种数据集用sklearn.datasets.fetch_*方式导入(获取)。
  • 随机生成数据:用sklearn.datasets.make_*导入(生成)。

好用的一致性

对于不同的机器学习算法,使用scikit-learn的套路很相似。


但要提前说一下,我还不算是scikit-learn的深度用户,所以我总结的相关套路是否全面,会不会打破,我并不敢保证。随着使用的深入,我也会酌情更新本文。


导入数据的一致性

如何导入数据,前面已讲,可以看出规律性很强,这就是一致性的体现。

使用模型的一致性

我所接触和实践的机器学习算法,都是遵从如下套路:

  • 导入相关的模型包,实例化模型,记为model
  • 使用train_test_split(X,y,...)进行数据集拆分
  • 使用model.fit(X_train, y_train)进行训练
  • 使用model_selection.cross_val_score(...)进行K折交叉验证
  • 使用model.score(X_verify, y_verify)进行验证
  • 使用model.predict(X_test)进行测试

好用的示例代码

示例代码请看:这里

Scikit-learn快速入门教程和实例(一) - 知乎 (zhihu.com)

Examples — scikit-learn 1.2.0 documentation

机器学习实战 | SKLearn最全应用指南 - ShowMeAI - 博客园 (cnblogs.com)

机器学习实战 | SKLearn入门与简单应用案例 (showmeai.tech)