入门 scikit-learn:分类与回归模型的实战应用

监督学习:分类与回归模型的实战应用

1. 监督学习概述

什么是监督学习?

监督学习是一种机器学习任务,其中模型从标记数据中学习,即每个训练样本都有一个对应的目标输出。监督学习主要分为两类任务:分类和回归。分类任务的目标是预测离散的类别标签,而回归任务的目标是预测连续的数值。

监督学习的基本流程

监督学习的基本流程包括以下几个步骤:

  1. 数据集准备:收集并标记数据。
  2. 数据预处理:处理缺失值、标准化等。
  3. 特征工程:选择或提取有用的特征。
  4. 模型选择:选择适合的算法。
  5. 模型训练:使用训练数据训练模型。
  6. 模型评估:使用测试数据评估模型性能。
  7. 模型优化:调整模型参数以提升性能。

2. 分类模型

2.1 逻辑回归

逻辑回归(Logistic Regression)是一种用于分类任务的线性模型,尽管名字中有“回归”一词。它通过学习数据的线性关系来预测样本属于某个类别的概率。

逻辑回归的数学原理

逻辑回归使用 Sigmoid 函数将线性回归的输出映射到 [0, 1] 之间,表示样本属于某个类别的概率。假设有输入特征向量 x \mathbf{x} x 和对应的权重向量 w \mathbf{w} w,逻辑回归的预测公式为:

[ P(y=1|\mathbf{x}) = \sigma(\mathbf{w}^T \mathbf{x}) ]

其中, σ ( z ) \sigma(z) σ(z) 是 Sigmoid 函数,定义为:

[ \sigma(z) = \frac{1}{1 + e^{-z}} ]

逻辑回归的实现

以下是使用 scikit-learn 实现逻辑回归的示例:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 数据拆分
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 模型训练
log_reg = LogisticRegression(max_iter=200)
log_reg.fit(X_train, y_train)

# 模型评估
y_pred = log_reg.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print("Logistic Regression Model Accuracy:", accuracy)
print("Confusion Matrix:\n", conf_matrix)
print("Classification Report:\n", class_report)

2.2 决策树

决策树(Decision Tree)是一种树形结构,用于做出决策。每个节点表示一个特征,每个分支表示一个特征值的可能性,每个叶节点表示一个类别。

决策树的构建过程

决策树通过递归地选择最优特征进行分割来构建。最优特征的选择基于某种度量,如信息增益或基尼不纯度。树的构建过程如下:

  1. 选择最优特征进行分割。
  2. 根据特征值将数据集分成子集。
  3. 对每个子集递归地重复上述过程,直到满足停止条件(如达到最大深度或叶节点纯度)。
决策树的实现

以下是使用 scikit-learn 实现决策树的示例:

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 模型训练
tree_clf = DecisionTreeClassifier(max_depth=3)
tree_clf.fit(X_train, y_train)

# 模型评估
y_pred = tree_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print("Decision Tree Model Accuracy:", accuracy)
print("Confusion Matrix:\n", conf_matrix)
print("Classification Report:\n", class_report)

2.3 支持向量机

支持向量机(Support Vector Machine, SVM)是一种用于分类和回归任务的强大模型。SVM 通过找到最优的分割超平面,将不同类别的样本分开。

支持向量机的原理

SVM 的核心思想是找到一个超平面,使得不同类别的样本在这个超平面上尽可能地分开,同时最大化两个类别之间的间隔(Margin)。对于线性不可分的数据,SVM 使用核函数将数据映射到高维空间,使其线性可分。

支持向量机的实现

以下是使用 scikit-learn 实现支持向量机的示例:

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 模型训练
svm_clf = SVC(kernel='linear')
svm_clf.fit(X_train, y_train)

# 模型评估
y_pred = svm_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print("SVM Model Accuracy:", accuracy)
print("Confusion Matrix:\n", conf_matrix)
print("Classification Report:\n", class_report)

3. 回归模型

3.1 线性回归

线性回归(Linear Regression)是一种用于回归任务的基础模型。它通过学习输入特征与目标变量之间的线性关系来进行预测。

线性回归的数学原理

线性回归假设目标变量 y y y 与输入特征 x \mathbf{x} x 之间存在线性关系,表示为:

[ y = \mathbf{w}^T \mathbf{x} + b ]

其中, w \mathbf{w} w 是权重向量, b b b 是偏置项。通过最小化均方误差(MSE)来学习 w \mathbf{w} w b b b 的最佳值。

线性回归的实现

以下是使用 scikit-learn 实现线性回归的示例:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 加载数据集
boston = load_boston()
X, y = boston.data, boston.target

# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 数据拆分
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 模型训练
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)

# 模型评估
y_pred = lin_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("Linear Regression Model MSE:", mse)
print("Linear Regression Model R2 Score:", r2)

3.2 决策树回归

决策树回归(Decision Tree Regression)是使用决策树进行回归任务的模型。与分类任务类似,决策树回归通过递归地选择最优特征进行分割,但目标是最小化每个叶节点的均方误差。

决策树回归的实现

以下是使用 scikit-learn 实现决策树回归的示例:

from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error, r2_score

# 模型训练
tree_reg = DecisionTreeRegressor(max_depth=3)
tree_reg.fit(X_train, y_train)

# 模型评估
y_pred = tree_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("Decision Tree Regression Model MSE:", mse)
print("Decision Tree Regression Model R2 Score:", r2)

3.3 支持向量回归

支持向量回归(Support Vector Regression, SVR)是支持向量机的回归版本。SVR 寻找一个超平面,使其尽可能多地包含数据点,同时控制超平面到数据点的距离不超过一定的阈值。

支持向量回归的实现

以下是使用 scikit-learn 实现支持向量回归的示例:

from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error, r2_score

# 模型训练
svr_reg = SVR(kernel='linear')
svr_reg.fit(X_train, y_train)

# 模型评估
y_pred = svr_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("SVR Model MSE:", mse)
print("SVR Model R2 Score:", r2)

4. 综合案例分析

通过一个综合案例分析,将分类和回归模型的各个步骤整合到一个完整的机器学习流程中,展示如何应用这些算法解决实际问题。

案例:预测房价

数据准备

使用波士顿房价数据集进行房价预测。首先进行数据加载、预处理和拆分。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 加载数据集
boston = load_boston()
X, y = boston.data, boston.target

# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 数据拆分
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
线性回归模型

训练线性回归模型并评估其性能。

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 模型训练
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)

# 模型评估
y_pred = lin_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("Linear Regression Model MSE:", mse)
print("Linear Regression Model R2 Score:", r2)
决策树回归模型

训练决策树回归模型并评估其性能。

from sklearn.tree import DecisionTreeRegressor

# 模型训练
tree_reg = DecisionTreeRegressor(max_depth=3)
tree_reg.fit(X_train, y_train)

# 模型评估
y_pred = tree_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("Decision Tree Regression Model MSE:", mse)
print("Decision Tree Regression Model R2 Score:", r2)
支持向量回归模型

训练支持向量回归模型并评估其性能。

from sklearn.svm import SVR

# 模型训练
svr_reg = SVR(kernel='linear')
svr_reg.fit(X_train, y_train)

# 模型评估
y_pred = svr_reg.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("SVR Model MSE:", mse)
print("SVR Model R2 Score:", r2)

结果对比

对比不同模型的性能,选择最优的模型。

print("Linear Regression Model MSE:", mse_lin_reg)
print("Decision Tree Regression Model MSE:", mse_tree_reg)
print("SVR Model MSE:", mse_svr_reg)

print("Linear Regression Model R2 Score:", r2_lin_reg)
print("Decision Tree Regression Model R2 Score:", r2_tree_reg)
print("SVR Model R2 Score:", r2_svr_reg)

5. 总结

在本章中,我们详细介绍了常见的监督学习算法,包括逻辑回归、决策树和支持向量机等分类模型,以及线性回归、决策树回归和支持向量回归等回归模型。我们探讨了每种算法的数学原理,并通过示例代码展示了如何使用 scikit-learn 实现这些模型和进行模型评估。通过一个综合案例分析,我们展示了如何应用这些算法解决实际问题,并对比不同模型的性能。希望通过本章的学习,您能够深入理解并应用监督学习算法,解决各种分类和回归任务。


  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值