5分钟带你深入了解监督学习的种类及各种算法的应用

监督学习(Supervised Learning)是机器学习领域中最常用的方法之一,它通过学习带有标签的训练数据集来建立预测模型。当给定一个新数据时,模型能够根据之前的学习来预测目标值。监督学习主要可以分为两大类任务:分类(Classification)回归(Regression)。接下来,我们将具体解释这些算法的工作原理、应用场景,并提供详细的代码示例。


监督学习的种类

1. 分类(Classification)

分类任务旨在根据输入特征将数据划分到预定义的类别中,输出结果是离散的类别标签。常见的分类算法有:

  • k近邻算法(K-Nearest Neighbors, KNN)

    • 原理:KNN是一种基于距离的分类算法,对于一个新的输入数据,它会计算该数据与训练集中所有数据的距离,并选取离它最近的k个点,然后根据这些点所属的类别进行投票,最终将新数据分配到得票最多的类别中。
    • 优点:简单易用,不需要训练过程。
    • 缺点:计算复杂度高,特别是当数据量大时。
    • 应用场景:图像分类、推荐系统、文本分类等。
  • 支持向量机(Support Vector Machine, SVM)

    • 原理:SVM通过寻找一个最优超平面,将数据点划分到不同的类别中。其目标是最大化超平面与两类之间的最小距离(即分类间隔),从而确保分类的鲁棒性。对于非线性数据,SVM可以通过核函数将数据映射到高维空间进行处理。
    • 优点:对高维数据有效,尤其是线性不可分数据。
    • 缺点:在大型数据集上训练时间较长,对参数调整敏感。
    • 应用场景:文本分类、生物信息学、图像识别等。
  • 决策树(Decision Tree)

    • 原理:决策树是一种基于树形结构的分类模型。通过逐步分割特征空间,每个内部节点表示一个特征的判定条件,叶节点则对应类别标签。决策树采用递归分割方式,以使各节点的同质性达到最大化。
    • 优点:直观易懂、可视化强。
    • 缺点:容易过拟合,需要剪枝或组合方法(如随机森林)来提升泛化性能。
    • 应用场景:客户流失预测、信用评分、医疗诊断等。
  • 随机森林(Random Forest)

    • 原理:随机森林是由多棵决策树组成的集成算法,每棵树都是通过从原始数据中随机抽取样本生成的。分类时,每棵树给出一个分类结果,最终根据多数投票决定样本所属的类别。
    • 优点:抗过拟合、精度高。
    • 缺点:训练时间长,模型难以解释。
    • 应用场景:复杂数据集上的分类和回归任务,如金融分析、市场营销等。
  • 逻辑回归(Logistic Regression)

    • 原理:逻辑回归是用于二分类问题的线性分类模型。它通过一个S型的逻辑函数将线性回归的输出映射到[0, 1]之间,表示样本属于某一类别的概率,当概率大于某个阈值时,该样本被分到正类,否则分到负类。
    • 优点:计算开销低、模型可解释性强。
    • 缺点:对非线性数据处理能力有限。
    • 应用场景:欺诈检测、医疗诊断、广告点击率预测等。
  • 朴素贝叶斯(Naive Bayes)

    • 原理:朴素贝叶斯基于贝叶斯定理,它假设所有特征是条件独立的。在实际应用中,尽管这一假设往往并不成立,但朴素贝叶斯算法在处理高维数据时效果较好。
    • 优点:快速、适合大数据集。
    • 缺点:假设特征独立不总是合理的。
    • 应用场景:文本分类(如垃圾邮件检测)、情感分析等。
  • 神经网络(Neural Networks)

    • 原理:神经网络模仿生物神经元,通过层与层之间的连接权重进行学习。每层的节点接收上一层的输入并进行非线性变换,输出结果传递给下一层,最终输出分类结果。现代神经网络尤其是深度学习(Deep Learning)在图像、语音等领域取得了显著成功。
    • 优点:能处理复杂的非线性问题。
    • 缺点:计算量大,训练时间长。
    • 应用场景:语音识别、自动驾驶、图像分类等。

2. 回归(Regression)

回归任务旨在根据输入特征预测连续的数值输出。常见的回归算法有:

  • 线性回归(Linear Regression)

    • 原理:线性回归试图找到一个线性函数,使得输入变量与目标输出之间的误差最小。模型通过最小二乘法估计参数,以最优拟合输入特征与输出变量之间的关系。
    • 优点:简单、可解释。
    • 缺点:无法处理非线性关系。
    • 应用场景:房价预测、经济增长预测、销售预测等。
  • 岭回归(Ridge Regression)

    • 原理:岭回归在线性回归的基础上增加了L2正则化项,通过惩罚系数的大小来防止模型过拟合。
    • 优点:能够处理多重共线性问题,抑制过拟合。
    • 缺点:引入了额外的复杂度,需要选择正则化参数。
    • 应用场景:信贷评分、风险评估等。
  • Lasso回归

    • 原理:Lasso回归与岭回归类似,但使用L1正则化项,可以在模型中引入稀疏性,使得一些系数为0,达到特征选择的效果。
    • 优点:有效的特征选择。
    • 缺点:对数据噪声敏感。
    • 应用场景:基因选择、变量筛选等。
  • 支持向量回归(Support Vector Regression, SVR)

    • 原理:与SVM分类类似,SVR通过在高维空间中寻找一个最优的函数,使得预测误差不超过一个预定阈值。
    • 优点:对高维数据表现良好。
    • 缺点:训练时间长,参数调优困难。
    • 应用场景:股票价格预测、经济数据分析等。
  • 决策树回归 & 随机森林回归

    • 原理:与分类问题类似,决策树回归和随机森林回归通过分割特征空间来预测连续值。随机森林回归通过组合多个决策树提高预测的鲁棒性。
    • 优点:能处理复杂、非线性的数据。
    • 缺点:容易过拟合,特别是决策树回归。
    • 应用场景:天气预报、销售数据分析等。

各类算法的应用领域

  1. k近邻算法(KNN)

    • 领域:推荐系统、图像分类。KNN简单易用,适合小数据集。
  2. 支持向量机(SVM)

    • 领域:文本分类、生物信息学。SVM在高维数据上表现优异,适合处理复杂的分类任务。
  3. 决策树 & 随机森林

    • 领域:信用评分、客户流失预测。决策树直观易懂,随机森林具有强大的分类和回归能力。
  4. 逻辑回归

    • 领域:二分类问题,适合欺诈检测、疾病预测。
  5. 线性回归

    • 领域:经济预测、风险评估。线性回归模型适用于预测连续值。
  6. 神经网络

    • 领域:语音识别、自动驾驶、自然语言处理。神经网络适合大规模复杂问题,尤其是深度学习的应用
分类任务的代码案例:使用支持向量机(SVM)进行鸢尾花分类

数据集简介: 我们将使用scikit-learn自带的鸢尾花(Iris)数据集。该数据集包含150个样本,每个样本有4个特征,分别是花萼长度、花萼宽度、花瓣

导入所需库
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
feature_names = iris.feature_names
target_names = iris.target_names

# 将数据集转换为DataFrame(可选)
df = pd.DataFrame(X, columns=feature_names)
df['species'] = y
df['species'] = df['species'].apply(lambda x: target_names[x])

# 数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 创建支持向量机(SVM)分类器
svm_classifier = SVC(kernel='linear', C=1.0, random_state=42)

# 训练模型
svm_classifier.fit(X_train, y_train)

# 进行预测
y_pred = svm_classifier.predict(X_test)

# 评估模型
print("分类报告:\n", classification_report(y_test, y_pred, target_names=target_names))
print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))

# 可视化混淆矩阵
plt.figure(figsize=(8,6))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, fmt='d', 
            xticklabels=target_names, yticklabels=target_names, cmap='Blues')
plt.xlabel('预测类别')
plt.ylabel('真实类别')
plt.title('SVM 分类混淆矩阵')
plt.show()

分类报告:
               precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.86      0.92        14
   virginica       0.86      1.00      0.92        11

    accuracy                           0.95        40
   macro avg       0.95      0.95      0.95        40
weighted avg       0.96      0.95      0.95        40

混淆矩阵:
 [[15  0  0]
 [ 0 12  2]
 [ 0  0 11]]

2. 回归任务的代码案例:使用线性回归预测加州房价

数据集简介: 我们将使用scikit-learn的加州房价(California Housing)数据集。该数据集包含20640个样本,每个样本有8个特征,如房间数量、房龄、地理位置等。目标是预测房屋的中位数价格。

代码示例

# 导入所需库
import numpy as np
import pandas as pd
from sklearn.datasets import fetch_california_housing
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
import matplotlib.pyplot as plt

# 加载加州房价数据集
california = fetch_california_housing()
X = california.data
y = california.target
feature_names = california.feature_names

# 将数据集转换为DataFrame(可选)
df = pd.DataFrame(X, columns=feature_names)
df['MedHouseVal'] = y

# 数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 创建线性回归模型
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(f"线性回归模型的均方误差(MSE):{mse:.4f}")
print(f"线性回归模型的决定系数(R²):{r2:.4f}")

# 可视化真实值与预测值
plt.figure(figsize=(8,6))
plt.scatter(y_test, y_pred, alpha=0.5, color='b')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--')
plt.xlabel('真实房价')
plt.ylabel('预测房价')
plt.title('线性回归预测房价效果')
plt.show()

# 可视化残差分布
residuals = y_test - y_pred
plt.figure(figsize=(8,6))
plt.hist(residuals, bins=50, color='g', edgecolor='k', alpha=0.7)
plt.xlabel('残差')
plt.ylabel('频数')
plt.title('线性回归残差分布')
plt.show()

代码解析

  1. 数据加载与预处理

    • 使用fetch_california_housing()加载加州房价数据集。
    • 将数据集转换为DataFrame便于查看(可选)。
    • 使用train_test_split将数据集划分为训练集和测试集,比例为80:20。
    • 使用StandardScaler进行特征标准化,以提高模型性能。
  2. 模型训练与预测

    • 创建一个线性回归模型(LinearRegression)。
    • 在训练集上训练模型。
    • 在测试集上进行预测。
  3. 模型评估与可视化

    • 使用均方误差(MSE)和决定系数(R²)评估模型性能。
    • 绘制真实值与预测值的散点图,观察模型的拟合效果。
    • 绘制残差分布图,检查模型的误差分布情况。

线性回归模型的均方误差(MSE):0.4324
线性回归模型的决定系数(R²):0.6063
 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐