AI
Scikit-learn是一个非常知名的Python机器学习库,它广泛地用于统计分析和机器学习建模等数据科学领域。

  • 建模无敌:用户通过scikit-learn能够实现各种监督和非监督学习的模型
  • 功能多样:同时使用sklearn还能够进行数据的预处理、特征工程、数据集切分、模型评估等工作
  • 数据丰富:内置丰富的数据集,比如:泰坦尼克、鸢尾花等,数据不再愁啦

这里通过简明快要的方式来介绍scikit-learn的使用,更多详细内容请参考官网:

  1. 内置数据集使用
  2. 数据集切分
  3. 数据归一化和标准化
  4. 类型编码
  5. 建模6步曲

机器学习库Scikit-Learn - 图1

一、Scikit-learn使用神图

下面这张图是官网提供的,从样本量的大小开始,分为回归、分类、聚类、数据降维共4个方面总结了scikit-learn的使用:https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
机器学习库Scikit-Learn - 图2
机器学习库Scikit-Learn - 图3

二、安装

关于安装scikit-learn,建议通过使用anaconda来进行安装,不用担心各种配置和环境问题。当然也可以直接pip来安装:

  1. pip install scikit-learn

三、数据集生成

sklearn内置了一些优秀的数据集,比如:Iris数据、房价数据、泰坦尼克数据等。

  1. import pandas as pd
  2. import numpy as np
  3. import sklearn
  4. from sklearn import datasets # 导入数据集

分类数据-iris数据

  1. # iris数据
  2. iris = datasets.load_iris()
  3. type(iris)
  4. sklearn.utils.Bunch

iris数据到底是什么样子?每个内置的数据都存在很多的信息
机器学习库Scikit-Learn - 图4
机器学习库Scikit-Learn - 图5
机器学习库Scikit-Learn - 图6
机器学习库Scikit-Learn - 图7
可以将上面的数据生成想看到的DataFrame,还可以添加因变量:
机器学习库Scikit-Learn - 图8
机器学习库Scikit-Learn - 图9

回归数据-波士顿房价

机器学习库Scikit-Learn - 图10
机器学习库Scikit-Learn - 图11
重点关注的属性:

  • data
  • target、target_names
  • feature_names
  • filename

同样可以生成DataFrame:
机器学习库Scikit-Learn - 图12

三种方式生成数据

方式1

  1. #调用模块
  2. from sklearn.datasets import load_iris
  3. data = load_iris()
  4. #导入数据和标签
  5. data_X = data.data
  6. data_y = data.target

方式2

  1. from sklearn import datasets
  2. loaded_data = datasets.load_iris() # 导入数据集的属性
  3. #导入样本数据
  4. data_X = loaded_data.data
  5. # 导入标签
  6. data_y = loaded_data.target

方式3

  1. # 直接返回
  2. data_X, data_y = load_iris(return_X_y=True)

数据集使用汇总

  1. from sklearn import datasets # 导入库
  2. boston = datasets.load_boston() # 导入波士顿房价数据
  3. print(boston.keys()) # 查看键(属性) ['data','target','feature_names','DESCR', 'filename']
  4. print(boston.data.shape,boston.target.shape) # 查看数据的形状
  5. print(boston.feature_names) # 查看有哪些特征
  6. print(boston.DESCR) # described 数据集描述信息
  7. print(boston.filename) # 文件路径

四、数据切分

  1. # 导入模块
  2. from sklearn.model_selection import train_test_split
  3. # 划分为训练集和测试集数据
  4. X_train, X_test, y_train, y_test = train_test_split(
  5. data_X,
  6. data_y,
  7. test_size=0.2,
  8. random_state=111
  9. )
  10. # 150*0.8=120
  11. len(X_train)

五、数据标准化和归一化

  1. from sklearn.preprocessing import StandardScaler # 标准化
  2. from sklearn.preprocessing import MinMaxScaler # 归一化
  3. # 标准化
  4. ss = StandardScaler()
  5. X_scaled = ss.fit_transform(X_train) # 传入待标准化的数据
  6. # 归一化
  7. mm = MinMaxScaler()
  8. X_scaled = mm.fit_transform(X_train)

六、类型编码

来自官网案例:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

对数字编码

机器学习库Scikit-Learn - 图13

对字符串编码

机器学习库Scikit-Learn - 图14

七、建模案例

导入模块

  1. from sklearn.neighbors import KNeighborsClassifier, NeighborhoodComponentsAnalysis # 模型
  2. from sklearn.datasets import load_iris # 导入数据
  3. from sklearn.model_selection import train_test_split # 切分数据
  4. from sklearn.model_selection import GridSearchCV # 网格搜索
  5. from sklearn.pipeline import Pipeline # 流水线管道操作
  6. from sklearn.metrics import accuracy_score # 得分验证

模型实例化

  1. # 模型实例化
  2. knn = KNeighborsClassifier(n_neighbors=5)

训练模型

  1. knn.fit(X_train, y_train)
  2. KNeighborsClassifier()

测试集预测

  1. y_pred = knn.predict(X_test)
  2. y_pred # 基于模型的预测值
  3. array([0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 1, 2, 2, 0, 2, 1, 0, 2, 1, 2,
  4. 1, 1, 2, 0, 0, 2, 0, 2])

得分验证

模型得分验证的两种方式:

  1. knn.score(X_test,y_test)
  2. 0.9333333333333333
  3. accuracy_score(y_pred,y_test)
  4. 0.9333333333333333

网格搜索

如何搜索参数

  1. from sklearn.model_selection import GridSearchCV
  2. # 搜索的参数
  3. knn_paras = {"n_neighbors":[1,3,5,7]}
  4. # 默认的模型
  5. knn_grid = KNeighborsClassifier()
  6. # 网格搜索的实例化对象
  7. grid_search = GridSearchCV(
  8. knn_grid,
  9. knn_paras,
  10. cv=10 # 10折交叉验证
  11. )
  12. grid_search.fit(X_train, y_train)
  13. GridSearchCV(cv=10, estimator=KNeighborsClassifier(),
  14. param_grid={'n_neighbors': [1, 3, 5, 7]})
  15. # 通过搜索找到的最好参数值
  16. grid_search.best_estimator_
  17. KNeighborsClassifier(n_neighbors=7)
  18. grid_search.best_params_
  19. Out[42]:
  20. {'n_neighbors': 7}
  21. grid_search.best_score_
  22. 0.975

基于搜索结果建模

  1. knn1 = KNeighborsClassifier(n_neighbors=7)
  2. knn1.fit(X_train, y_train)
  3. KNeighborsClassifier(n_neighbors=7)

通过下面的结果可以看到:网格搜索之后的建模效果是优于未使用网格搜索的模型:

  1. y_pred_1 = knn1.predict(X_test)
  2. knn1.score(X_test,y_test)
  3. 1.0
  4. accuracy_score(y_pred_1,y_test)
  5. 1.0