API - Sklearn三大模型 - Transformer、Estimator、Pipeline

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了API - Sklearn三大模型 - Transformer、Estimator、Pipeline相关的知识,希望对你有一定的参考价值。

参考技术A


sklearn.pipeline.Pipeline

在Sklearn当中有三大模型:Transformer 转换器、Estimator 估计器、Pipeline 管道

Transformer有输入有输出,同时输出可以放入Transformer或者Estimator 当中作为输入。

y_predict 是估计器的输出模型,估计器输出无法再放入Transformer 或 Estimator当中再获取另一个输出了。

将Transformer、Estimator 组合起来成为一个大模型。
管道: 输入→□→□→□→■→ 输出
□:Transformer ; ■:Estimator ;
Transformer放在管道前几个模型中,而Estimator 只能放到管道的最后一个模型中。

结合:
04 回归算法 - 最小二乘线性回归案例
05 回归算法 - 多项式扩展、管道Pipeline

头文件引入Pipeline:
from sklearn.pipeline import Pipeline

其他需要引入的包:

Pipeline 的参数是一个列表,列表中存放着每一个模型的信息。

第0个模型名字: ss,告诉系统我要做 数据标准化

第1个模型名字: Poly,告诉系统我要做一个 多项式扩展
PolynomialFeatures即进行了ss= StandardScaler()的操作,并做了3阶的扩展

第2个模型名字: Linear,告诉系统进行 模型训练
fit_intercept=False 表示截距为0
截距:y=ax+b, b是截距。一般推荐使用fit_intercept=True。

如果输入特征包含x1,x2,将特征放入多项式扩展的图纸后,我们会得到一个针对x1,x2扩展的特征集,并把数据输出出来。因此在多项式扩展的算法中,存储的特征集合将是扩展后的结果。

最后用一张图解释fit、transfrom操作在管道和一般模型训练中的区别:

sklearn机器学习之线性回归模型

⭐️几天没写博客了,接着来,接下来的内容主要涉及机器学习的sklearn的API的章节,本章节将开启机器学习的入门的课程👇:

  • 该系列学习主要是讲sklearn中机器学习API的使用。
  • 该系列只会涉及较少的原理知识。只会涉及基础概念。

1.线性回归模型的概念

在这里插入图片描述

2.sklearn实现

线性回归的API

from sklearn.linear_model import LinearRegression,Ridge,Lasso

2.1 简单的直线

这里我们画一条y=0.5x+3的图像

#线性回归
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-5,5,100)#x轴
y=0.5*x+3#表达式y
plt.plot(x,y,c='green')
plt.title("line")
plt.show()

在这里插入图片描述

2.2 两点定线

我们使用两点(1,3)和(4,5)来确定一条直线,这里有重要的东西需要说明,x的形状必须是列向量!coef_和intercept_是sklearn表示模型属性的值w和b

#通过两点计算直线
from sklearn.linear_model import LinearRegression
x=[[1],[3]]#这里一定要是一个列向量
y=[3,5]
lr=LinearRegression().fit(x,y)
z=np.linspace(0,5,20)
plt.scatter(x,y,s=80)
plt.plot(z,lr.predict(z.reshape(-1,1)),c='k')#将z转化为列向量
plt.show()
# coef_[0]代表斜率和interce_代表截距
print('斜率',lr.coef_[0],'截距',lr.intercept_)#计算斜率和截距

在这里插入图片描述

3. 广义线性回归模型

这里我们使用make_regressions函数来生成回归数据集。

# 使用make_regressions生成回归数据集
from sklearn.datasets import make_regression
x,y=make_regression(n_samples=50,n_features=1,n_informative=1,noise=50,random_state=1)
'''
n_samples:样本数
n_features:特征数(自变量个数)
n_informative:参与建模特征数
n_targets:因变量个数
noise:噪音
bias:偏差(截距)
coef:是否输出coef标识
random_state:随机状态若为固定值则每次产生的数据都一样
'''
#线性拟合
reg=LinearRegression().fit(x,y)
z=np.linspace(-3,3,200).reshape(-1,1)
#画出散点图
plt.scatter(x,y,c='r',s=80)
#画出拟合直线
plt.plot(z,reg.predict(z),c='k')
plt.show()

3.1线性回归的性能表现

拟合的好不好需要指标来衡量,lr.score函数就是通过R^2决定系数来计算模型的好坏。

#使用拆分工具来进行线性回归
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
x,y=make_regression(n_samples=100,n_features=2,n_informative=2,random_state=38)
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
lr=LinearRegression().fit(x_train,y_train)
print("训练",lr.score(x_train,y_train))#这里的分数为R^2决定系数1最好,0最差
print("测试集损失",lr.score(x_test,y_test))

在这里插入图片描述
我们使用糖尿病数据集来测试

#糖尿病数据集测试
from sklearn.datasets import load_diabetes#导入数据
x,y=load_diabetes().data,load_diabetes().target#分为特征和标签
#将数据集0.8分为训练集,0.2分为测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
#线性回归
lr=LinearRegression().fit(x_train,y_train)
print(lr.score(x_train,y_train))
print(lr.score(x_test,y_test))

在这里插入图片描述

4. 岭回归——L2正则化

在这里插入图片描述
岭回归中有个参数alpha来控制过拟合的程度

ridge=Ridge(alpha=1).fit(x_train,y_train)

我们使用糖尿病数据集来测试

from sklearn.datasets import load_diabetes#导入数据
x,y=load_diabetes().data,load_diabetes().target#分为特征和标签
#将数据集0.8分为训练集,0.2分为测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
#岭回归L2正则化
from sklearn.linear_model import Ridge
ridge=Ridge().fit(x_train,y_train)
print('训练集分数:',ridge.score(x_train,y_train))
print("测试集分数:",ridge.score(x_test,y_test))

在这里插入图片描述

5. 套索回归——L1正则化

在这里插入图片描述

from sklearn.datasets import load_diabetes#导入数据
x,y=load_diabetes().data,load_diabetes().target#分为特征和标签
#将数据集0.8分为训练集,0.2分为测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
#套索回归lasso
from sklearn.linear_model import Lasso
lasso=Lasso().fit(x_train,y_train)
print('训练集分数:',lasso.score(x_train,y_train))
print("测试集分数:",lasso.score(x_test,y_test))

在这里插入图片描述

参考资料

《深入浅出python机器学习》

以上是关于API - Sklearn三大模型 - Transformer、Estimator、Pipeline的主要内容,如果未能解决你的问题,请参考以下文章

初识人工智能:机器学习:sklearn数据集

sklearn学习笔记之开始

复盘一篇讲sklearn库学习文章(上)

将分类变量转换为伪变量后,如何从sklearn api中找到功能的重要性?

分享几个 Sklearn 模块中不为人知又超级好用的 API 函数

sklearn机器学习之决策树