引言
有一个开源的、可用于商业目的的机器学习工具包叫做
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
的函数以及matplotlib
和NumPy
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
- 使用该工具包实现了梯度下降和特征标准化的线性回归