三、机器学习基础知识:Python常用机器学习库(SKlearn)

文章目录

1、Scikit learn简介

Scikit learn 的简称是 SKlearn,专门提供了 Python 中实现机器学习的模块。Sklearn 是一个简单高效的数据分析算法工具,建立在 NumPy、SciPy和 Matplotlib 的基础上。SKlearn 包含许多目前最常见的机器学习算法,例如分类、回归、聚类、数据降维,数据预处理等,每个算法都有详细的说明文档。

对于大多数机器学习,通常有以下四个数据集。

  1. train_ data.训练数据集。
  2. train target:训练数据的真实结果集。
  3. test_data:测试数据集。
  4. test_ target:测试数据集所对应的真实结果,用来检测预测的正确性。

用各算法解决问题时,也大都有两个共同的核心两数:训练函数fit()和测试函数predict()。

2、主要步骤

Sklearn针对机器学习的过程,提供了一个一般步骤,该步骤主要过程如下:

  1. 获取数据,创建数据集。在Sklearn中提供了很多经典的数据集可以直接使用,通过Sklearn的datasets模块来使用里面的相关数据集,包括经典的鸢尾花数据集、波士顿房价数据集等。
  2. 数据预处理。这一步骤专门针对数据进行预处理,使数据能够有效地被模型或者评估器识别。
  3. 数据集拆分。该步骤主要将数据集拆分为训练数据集与验证数据集,训练集用于训练模型,验证集用于验证模型性能。
  4. 训练模型。针对需要处理的问题,选择适当的模型并进行定义,同时使用训练数据集对定义好的模型进行训练。
  5. 性能评估。使用相关的评估标准对训练好的模型性能进行评估。

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 葡萄酒数据集

鸢尾花数据集的加载:

python 复制代码
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)  #输出鸢尾花数据集的类别标签

葡萄酒数据集的加载:

python 复制代码
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进行标准化:

python 复制代码
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进行标准化:

python 复制代码
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()是交叉验证中常用的函数,其语法格式如下:

python 复制代码
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为随机数的种子,即该组随机数的编号,重复实验时,使用相同编号可以获取相同的数据集。

一般来说,在进行机器学习训练时,只需要将数据集划分为训练集和测试集即可,对于较为复杂的训练过程,可以划分为训练集、验证集以及测试集,划分过程均可通过上述函数实现。
数据集的划分:

python 复制代码
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() 验证曲线

分类性能评价:

python 复制代码
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指数和支持度

扩展:
四、机器学习基础知识:交叉验证
八、机器学习基础知识:分类性能评价指标
九、机器学习基础知识:回归预测性能评价指标

相关推荐
stormsha4 分钟前
go-rod vs Selenium:自动化测试工具的比较与选择
python·selenium·测试工具·golang
逝去的紫枫5 分钟前
Python Selenium:Web自动化测试与爬虫开发
开发语言·python·selenium
南门听露24 分钟前
无监督跨域目标检测的语义一致性知识转移
人工智能·目标检测·计算机视觉
夏沫の梦25 分钟前
常见LLM大模型概览与详解
人工智能·深度学习·chatgpt·llama
平头哥在等你28 分钟前
python特殊字符序列
开发语言·python·正则表达式
WeeJot嵌入式40 分钟前
线性代数与数据挖掘:人工智能中的核心工具
人工智能·线性代数·数据挖掘
明明真系叻1 小时前
第二十二周机器学习笔记:动手深度学习之——线性代数
笔记·深度学习·线性代数·机器学习·1024程序员节
星光樱梦1 小时前
02. Python基础知识
python
亚图跨际1 小时前
MATLAB和C++及Python流式细胞术
c++·python·matlab·流式细胞术
steamedobun2 小时前
【爬虫】Firecrawl对京东热卖网信息爬取(仅供学习)
爬虫·python