【机器学习】Scikit-Learn的概念以及如何在Jupyter Notebook中使用Scikit-Learn实现线性回归

引言

有一个开源的、可用于商业目的的机器学习工具包叫做scikit-learn
scikit-learn这个工具包包含了许多将在本课程中使用的算法的实现

一、Scikit-Learn定义

Scikit-Learn是一个用于数据挖掘和数据分析的 Python 库,它提供了简单而有效的数据分析和预测工具

二、主要特点

2.1 简单高效

Scikit-Learn 提供了一系列的监督和非监督学习算法,通过一致性的接口,可以轻松实现模型的训练、评分、预测等操作

2.2 易于安装

通过 pip 安装命令 pip install scikit-learn 即可轻松安装

2.3 文档丰富

拥有大量的示例代码和详细的文档,方便用户学习和使用

2.4 社区支持

由于它是开源项目,拥有一个活跃的社区,不断更新和维护

三、组成部分

3.1 数据预处理

包括数据缩放、变换、缺失值处理等

3.2 特征选择

提供特征选择机制,帮助识别对预测任务最重要的特征

3.3 特征抽取

通过转换数据,如主成分分析(PCA),提取更有用的信息

3.4 模型评估

提供交叉验证、得分函数、混淆矩阵等工具,帮助评估模型性能

3.5 数据集拆分

提供方便的工具,如 train_test_split,用于将数据集拆分为训练集和测试集

四、常用模型

4.1 监督学习算法

如线性回归、支持向量机(SVM)、决策树、随机森林、梯度提升机(GBM)、K-最近邻(KNN)等

4.2 非监督学习算法

如聚类(K-Means、层次聚类等)、主成分分析(PCA)、t-SNE 等

五、简单使用Scikit-Learn实现线性回归

以下是一个使用Scikit-Learn实现线性回归的简单示例:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 示例数据
X = [[1], [2], [3], [4], [5]]
y = [1, 2, 2.5, 4, 5]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"Mean squared error: {mse}")
# 输出模型参数
print(f"Coefficients: {model.coef_}")
print(f"Intercept: {model.intercept_}")

Scikit-Learn是一个强大的机器学习库,适用于各种研究和工业应用。它的设计哲学强调代码的简洁性、可重复性和易用性

六、如何在Jupyter Notebook中使用Scikit-Learn实现线性回归

6.1 目标

利用scikit-learn通过梯度下降实现线性回归

6.2 工具

使用scikit-learn的函数以及matplotlibNumPy

import numpy as np
np.set_printoptions(precision=2)
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.preprocessing import StandardScaler
from lab_utils_multi import  load_house_data
import matplotlib.pyplot as plt
dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0'; 
plt.style.use('./deeplearning.mplstyle')

6.3 梯度下降

Scikit-learn有一个梯度下降回归模型 sklearn.linear_model.SGDRegressor。和之前实现的梯度下降一样,这个模型在标准化输入时表现最好。sklearn.preprocessing.StandardScaler 将执行之前实验中的z-score标准化。这里它被称为“标准分数”。

6.3.1 加载数据集

X_train, y_train = load_house_data()
X_features = ['size(sqft)','bedrooms','floors','age']
# 标准化训练数据
scaler = StandardScaler()
X_norm = scaler.fit_transform(X_train)
print(f"原始X每列的最大值和最小值之差: {np.ptp(X_train,axis=0)}")   
print(f"标准化后X每列的最大值和最小值之差: {np.ptp(X_norm,axis=0)}")

输出结果:
在这里插入图片描述

6.3.2 创建并拟合回归模型

sgdr = SGDRegressor(max_iter=1000)
sgdr.fit(X_norm, y_train)
print(sgdr)
print(f"完成迭代次数: {sgdr.n_iter_}, 权重更新次数: {sgdr.t_}")

输出结果:
在这里插入图片描述

6.3.3 查看参数

这些参数与标准化输入数据相关。拟合参数与之前实验中找到的非常接近。

b_norm = sgdr.intercept_
w_norm = sgdr.coef_
print(f"model parameters:                   w: {w_norm}, b:{b_norm}")
print(f"model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16")

输出结果:
在这里插入图片描述

6.3.4 预测

预测训练数据的标签。使用 𝑤 和 𝑏 的同时,通过 predict 方法进行预测。

# 使用sgdr.predict()进行预测
y_pred_sgd = sgdr.predict(X_norm)
# 使用w,b进行预测。 
y_pred = np.dot(X_norm, w_norm) + b_norm  
print(f"使用np.dot()和sgdr.predict()的预测结果是否匹配: {(y_pred == y_pred_sgd).all()}")print(f"训练集上的预测结果:\n{y_pred[:4]}" )
print(f"目标值 \n{y_train[:4]}")

输出结果:
在这里插入图片描述

6.3.5 绘制

让我们绘制预测值与目标值的关系图。

# 绘制预测值和目标值与原始特征的对比图    
fig,ax=plt.subplots(1,4,figsize=(12,3),sharey=True)
for i in range(len(ax)):
    ax[i].scatter(X_train[:,i],y_train, label = '目标值')
    ax[i].set_xlabel(X_features[i])
    ax[i].scatter(X_train[:,i],y_pred,color=dlorange, label = '预测值')
ax[0].set_ylabel("价格"); ax[0].legend();
fig.suptitle("目标值与使用z-score标准化模型的预测值对比")
plt.show()

绘制结果:
在这里插入图片描述

6.4 使用Scikit-Learn实现线性回归总结

  • 利用了一个开源的机器学习工具包–Scikit-learn
  • 使用该工具包实现了梯度下降和特征标准化的线性回归
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值