文章目录
- 1、Scikit learn简介
- 2、主要步骤
- 3、数据预处理
- 4、模型选择与算法评价
1、Scikit learn简介
Scikit learn 的简称是 SKlearn,专门提供了 Python 中实现机器学习的模块。Sklearn 是一个简单高效的数据分析算法工具,建立在 NumPy、SciPy和 Matplotlib 的基础上。SKlearn 包含许多目前最常见的机器学习算法,例如分类、回归、聚类、数据降维,数据预处理等,每个算法都有详细的说明文档。
对于大多数机器学习,通常有以下四个数据集。
- train_ data.训练数据集。
- train target:训练数据的真实结果集。
- test_data:测试数据集。
- test_ target:测试数据集所对应的真实结果,用来检测预测的正确性。
用各算法解决问题时,也大都有两个共同的核心两数:训练函数fit()和测试函数predict()。
2、主要步骤
Sklearn针对机器学习的过程,提供了一个一般步骤,该步骤主要过程如下:
- 获取数据,创建数据集。在Sklearn中提供了很多经典的数据集可以直接使用,通过Sklearn的datasets模块来使用里面的相关数据集,包括经典的鸢尾花数据集、波士顿房价数据集等。
- 数据预处理。这一步骤专门针对数据进行预处理,使数据能够有效地被模型或者评估器识别。
- 数据集拆分。该步骤主要将数据集拆分为训练数据集与验证数据集,训练集用于训练模型,验证集用于验证模型性能。
- 训练模型。针对需要处理的问题,选择适当的模型并进行定义,同时使用训练数据集对定义好的模型进行训练。
- 性能评估。使用相关的评估标准对训练好的模型性能进行评估。
3、数据预处理
在Sklearn的datasets模块提供了一些常见的数据集。
数据集 | 描述 |
---|---|
datasets.fetch_california_housing | 加利福尼亚住房数据集 |
datasets.fetch_lfw_people | 有标签的人脸数据集 |
datasets.load_boston | 波士顿房价数据集 |
datasets.load_breast_cancer | 乳腺癌数据集 |
datasets.load_diabetes | 糖尿病数据集 |
datasets.load_iris | 鸢尾花数据集 |
datasets.load_wine | 葡萄酒数据集 |
鸢尾花数据集的加载:
from sklearn.datasets import load_iris
import pandas as pd
iris_data = load_iris()
x=pd.DataFrame(iris_data.data)
print(x) #输出鸢尾花数据集每条数据包含的属性数据值
y=iris_data.target
print(y) #输出鸢尾花数据集的类别标签
葡萄酒数据集的加载:
from sklearn.datasets import load_wine
import pandas as pd
wine_data = load_wine()
x=pd.DataFrame(wine_data.data)
print(x) #输出葡萄酒数据集的属性数据
y=wine_data.target
print(y) #输出葡萄酒数据集的类别标签
Sklearn所进行的预处理主要是针对数据集完成诸如数据标准化、正则化、二值化、编码以及数据缺失处理等,使用的是preprocessing模块的相关功能,常用的功能如下:
函数名称 | 功能 |
---|---|
preprocessing.Binarizer | 根据阈值对数据进行二值化 |
preprocessing.Imputer | 插值,用于填补缺失值 |
preprocessing.LabelBinarizer | 对标签进行二值化 |
preprocessing.MinMaxScaler | 将每个数据标准化到某个范围内 |
preprocessing.Normalizer | 将每个数据归一化为单位范数 |
preprocessing.OneHotEncoder | 使用One-Hot方案对整数特征编码 |
preprocessing.StandardScaler | 对数据进行标准正态分布的标准化 |
preprocessing.normalize | 将输入向量缩放为单位范数 |
preprocessing.scale | 沿某个轴标准化数据 |
使用preprocessing.MinMaxScaler进行标准化:
from sklearn import preprocessing
import numpy as np
x=np.array([[12,145,6],[27,365,3],[33,115,2]])
x_minmax=preprocessing.MinMaxScaler() #默认缩放到区间[0,1]之间
x_minmax.fit_transform(x)
使用preprocessing.StandardScaler进行标准化:
from sklearn import preprocessing
import numpy as np
x=np.array([[12,145,6],[27,365,3],[33,115,2]])
x_scaled=preprocessing.StandardScaler().fit(x)
x_scaled.transform(x)
完成数据的标准化或归一化之后需要将数据集(训练数据集)做进一步划分,一般来说划分为训练集和验证集,划分过程可以直接使用Sklearm提供的train_test_split()方法,按照比例对数据集进行划分.。train_test_split()是交叉验证中常用的函数,其语法格式如下:
x_train,x_test,y_train,y_test=cross_calidationtrain_test_split(train_data,train_target,test_size=0.3,random_state= )
其中train_data,train_target分别表示要划分的样本数据集和数据集特征;test_size表示验证集占比,默认值为0.3,即验证集占整体数据集的30%,若设置为整数,则为验证集的数量;random_state为随机数的种子,即该组随机数的编号,重复实验时,使用相同编号可以获取相同的数据集。
一般来说,在进行机器学习训练时,只需要将数据集划分为训练集和测试集即可,对于较为复杂的训练过程,可以划分为训练集、验证集以及测试集,划分过程均可通过上述函数实现。
数据集的划分:
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.model_selection import train_test_split
iris_data = load_iris()
x=pd.DataFrame(iris_data.data)
y=pd.DataFrame(iris_data.target)
train_x,test_x,train_y,test_y=train_test_split(x,y,test_size=0.3,random_state=0)
print('训练数据集属性数据:\n',train_x)
print('测试数据集属性数据:\n',test_x)
print('训练数据集标签数据:\n',train_y)
print('测试数据集标签数据:\n',test_y)
4、模型选择与算法评价
模型选择主要包括两个部分:学习模型的选择、超参数的设置。
通过分析问题,确定要选择什么模型来处理问题,Sklearn中主要模型包括:分类、回归、聚类、降维、模型选择以及预处理这几个功能模块,每个功能模型都提供了丰富的算法模型提供使用,针对不同的问题,选择合适的模型是非常重要的。
确定好模型后,需要为模型选择合适的超参数,通过对参数的赋值来完成模型初始化。
模型建立之后,需要使用数据集进行学习,即训练,Sklearn的机器学习模型中大都提供了fit()函数用于学习训练;训练完成之后就可以使用模型对新的数据集进行测试,Sklearn的机器学习模型同样大都提供了predict()函数用于测试。
在测试过程中,性能指标是主要用于评价模型的标准,它一般是通过测量,计算模型的输出和真值之间的差距而得出,Sklearn的metrics模块中提供了许多计算差距的评估方法以供选择。
常用的分类评价指标:
函数名 | 功能 |
---|---|
metrics.f1_score() | 计算调和均值f1指数 |
metrics.precision_score() | 计算精确率 |
metrics.recall_score() | 计算召回率 |
metrics.roc_auc_acore() | 计算曲线ROC的面积 |
metrics.precision_recall_fscore_support() | 计算每个类的精确度、召回率、f1指数和支持度 |
metrics.classification_report() | 根据测试标签和预测标签,计算分类的精确度、召回率、f1指数和支持度 |
常用的Sklearn回归指标:
函数名 | 功能 |
---|---|
metrics.mean_absolute_error() | 平均绝对误差回归损失 |
metrics.mean_squared_error() | 均方误差回归损失 |
metrics.r2_score() | R^2回归分数函数 |
Sklearn还提供了聚类指标,包括常见的兰德指数等,可以直接使用函数名调用:
metrics.adjusted_rand_score(labels_true,…)
此外sklearn.model_selection模块中也提供了模型验证功能:
函数名 | 功能 |
---|---|
model_selection.cross_validate() | 通过交叉验证评估指标,并记录测试分数、训练得分、拟合次数等,可多个指标 |
model_selection.cross_val_score() | 通过交叉验证评估测试分数,单个指标 |
model_selection.learning_curve() | 学习曲线 |
model_selection.validation_curve() | 验证曲线 |
分类性能评价:
from sklearn.metrics import classification_report
y_true=[0,1,1,0,0,0]
y_prediction=[0,0,1,1,0,0]
print(classification_report(y_true,y_prediction)) #计算分类的精确度、召回率、f1指数和支持度
扩展:
四、机器学习基础知识:交叉验证
八、机器学习基础知识:分类性能评价指标
九、机器学习基础知识:回归预测性能评价指标