有监督学习&无监督学习

时间:2024-10-02 21:19:36

有监督学习&无监督学习


有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)是机器学习中的两种主要方法,它们在目标、数据使用和应用场景上有显著的区别:

  1. 目标不同
    • 有监督学习:目的是通过训练数据集(包含输入特征和对应的标签)来学习一个模型,以便对新的、未见过的数据进行预测或分类。它的目标是找到输入数据和输出标签之间的关系。
    • 无监督学习:目的是在没有标签的数据中发现模式、结构或分布。它试图理解数据的本质,而不是预测或分类。
  2. 数据使用
    • 有监督学习:需要标注过的训练数据,即每个训练样本都有一个与之对应的标签。
    • 无监督学习:使用未标注的数据,算法需要自己找出数据中的结构。
  3. 应用场景
    • 有监督学习:常用于分类(如垃圾邮件识别)、回归(如房价预测)等任务。
    • 无监督学习:常用于聚类(如市场细分)、关联规则学习(如购物篮分析)、异常检测(如信用卡欺诈检测)等任务。
  4. 算法示例
    • 有监督学习:决策树、支持向量机(SVM)、神经网络、逻辑回归等。
    • 无监督学习:K-均值聚类、主成分分析(PCA)、自编码器、生成对抗网络(GANs)等。
  5. 评估方式
    • 有监督学习:通常使用准确率、召回率、F1分数、均方误差(MSE)等指标来评估模型性能。
    • 无监督学习:评估较为复杂,可能使用内部评价指标(如簇内距离)或外部评价指标(如果已知真实标签)。
  6. 挑战
    • 有监督学习:需要大量的标注数据,标注成本高,且对数据的噪声和不完整性敏感。
    • 无监督学习:由于缺乏标签,很难验证模型是否找到了正确的数据结构,且结果的解释性不如有监督学习。
  7. 半监督学习:介于有监督学习和无监督学习之间,使用少量标注数据和大量未标注数据进行训练。
  8. 强化学习:虽然不属于有监督或无监督学习,但它是一种通过与环境的交互来学习如何做出决策的方法。

总的来说,有监督学习关注于预测和决策,而无监督学习关注于探索和发现数据的内在结构。

有监督学习


一、监督学习的基本概念

1.1 概念定义

监督学习是通过已知的输入和输出数据样本,来学习一个确定性函数或概率分布模型的方法。在监督学习中,输入和输出变量都是已知的,同时,学习器的输出也必须与人工给定的真实结果一致。监督学习通常可分为两类:回归问题和分类问题。回归问题是指对连续值的预测问题,比如预测房价、股票价格等;分类问题是指对离散值的预测问题,比如判断一封邮件是否为垃圾邮件、预测肿瘤是否为恶性等。

1.2 基本步骤

监督学习的基本步骤可以概括为以下三步:

(1)数据准备:需要将已知数据分为训练集和测试集,通常采用交叉验证方法来划分数据集。

(2)模型选择:需要选择适合问题的模型,比如线性回归模型、决策树模型、支持向量机模型等。

(3)模型训练和预测:使用训练数据对模型进行训练,然后用测试数据集对模型进行预测,并通过评价指标对模型进行评价。

二、常见的监督学习算法

2.1 线性回归

线性回归是一种基本的监督学习算法,适用于解决大部分的回归问题。线性回归假设目标函数是一个线性组合,并利用样本的输入和输出将其拟合。线性回归模型的形式如下:
y = w 0 + ∑ i = 1 n w i x i y=w_0+\sum_{i=1}^nw_ix_i y=w0+i=1nwixi
其中,y 表示预测值,x_i 表示输入特征,w_i 表示特征权重,w_0 表示截距。线性回归模型的训练过程就是求解权重向量 w 使得预测值与真实值之间的平均方差最小。

2.2 决策树

决策树是一种基于分支结构的非参数监督学习算法,用于解决分类和回归问题。决策树将样本分成多个子集,每个子集对应于一个叶子节点,其内部节点表示特征选择规则。决策树算法的核心是构建决策树,根据信息增益或基尼指数等指标,选择最优的特征进行分割。常用的决策树算法包括 ID3、C4.5、CART 等。

2.3 支持向量机

支持向量机是一种二分类和回归问题的监督学习算法,主要用于分类问题。支持向量机的主要思想是在特征空间中寻找一个最优划分超平面,使得不同类别的数据点距离该超平面最近时距离最大,可以通过核函数的变换实现非线性分类问题。支持向量机是一种高效的分类算法,被广泛应用于计算机视觉、文本分类等领域。

2.4 朴素贝叶斯

朴素贝叶斯是一种基于贝叶斯定理的分类算法,处理分类问题时,它假设特征之间条件独立,即其后验概率可以通过先验概率和条件概率的乘积求得。朴素贝叶斯分类器拥有简单和快速的分类方法,常被用于垃圾邮件分类、文本分类、情感分析等任务。

三、监督学习的评价指标

3.1 准确率和召回率

准确率和召回率是用于评估分类模型性能的重要指标。准确率是指分类器正确分类所有测试集样本的百分比,其计算公式为:
A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP+TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN
其中,TP 表示真阳性(true positive)、TN 表示真阴性(true negative)、FP 表示假阳性(false positive)、FN 表示假阴性(false negative)。

召回率是指分类器能够正确识别出正样本的能力,其计算公式为:
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP

3.2 F1 值

F1 值是准确率和召回率的综合度量,可以用来对各种分类算法的性能进行比较。F1 值是准确率和召回率的加权调和平均值,其计算公式为:
F 1 = 2 P R P + R F1=\frac{2PR}{P+R} F1=P+R2PR
其中,P 表示准确率,R 表示召回率。

3.3 AUC

AUC(Area Under Curve)被广泛使用于评估分类模型性能。AUC 总结了分类器所有可能的预测排序,是 ROC 曲线下的面积。AUC 值越接近于 1,说明分类器具有更好的性能,越接近于 0.5,则说明分类器的性能较差。

????案例

????监督学习 - 房价预测(回归)

(https://gitcode.com/open-source-toolkit/a4add?utm_source=highlight_word_gitcode&word=%E6%88%BF%E4%BB%B7%E9%A2%84%E6%B5%8B&isLogin=1)

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 数据加载

data = pd.read_csv('housing.csv')

# 数据预处理

X = data.drop('price', axis=1)
y = data['price']

# 分割数据集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 模型选择与训练

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}')

​ 在这个案例中,我们使用线性回归算法预测房价。通过将数据集分为训练集和测试集,我们训练模型并评估其性能。

无监督学习


无监督学习涉及从未标记的数据中发现模式、结构和关联。以下是一些常见的无监督学习算法:

**聚类算法(**Clustering Algorithms):聚类算法用于将数据样本划分为不同的组或簇,每个簇内的样本具有相似的特征。常见的聚类算法包括K均值聚类(K-means clustering)、层次聚类(Hierarchical clustering)和DBSCAN(Density-Based Spatial Clustering of Applications with Noise)。

主成分分析(Principal Component Analysis,PCA):PCA是一种降维算法,用于减少数据的维度,同时保留最重要的特征。它通过线性变换将原始特征映射到较低维度的新特征空间,其中新特征称为主成分。

**关联规则挖掘(**Association Rule Mining):关联规则挖掘用于发现数据中的频繁项集和关联规则。它可以揭示数据中的隐含关系和相关性,例如超市购物篮中的商品组合。Apriori算法和FP-Growth算法是常用的关联规则挖掘算法。

异常检测(Anomaly Detection):异常检测算法用于识别数据中的异常或异常行为。它通过与正常模式的差异来识别异常样本,有助于发现潜在的问题或异常情况。

自组织映射(Self-Organizing Maps,SOM):SOM是一种神经网络算法,用于将多维数据映射到一个二维或三维的拓扑结构上。它可以可视化数据的分布和聚类结构。

高斯混合模型(Gaussian Mixture Models,GMM):GMM是一种概率模型,用于建模多个高斯分布的组合。它可以用于聚类、密度估计和生成新的样本。

t-SNE:t-SNE是一种非线性降维算法,用于可视化高维数据。它能够在保持数据之间的局部和全局关系的同时,将高维数据映射到低维空间。

案例

????无监督学习 - 客户分群(聚类)

聚类算法数据集资源:本仓库提供了用于博客中介绍的聚类算法(K-means、FCM、DBSCAN、DPC)的数据集,这些数据集包括常见的Iris鸢尾花数据集、Wine葡萄酒数据集、Seed小麦种子数据集、glass数据集、WDBD乳腺癌数据集,以及几个人工数据集如Flame、Spiral等。这些数据集可以直接下载并存入您的项目文件夹中使用。 - GitCode

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 数据加载

data = pd.read_csv('customer_data.csv')

# 数据预处理

scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)

# 模型选择与训练

kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(data_scaled)

# 聚类结果

labels = kmeans.labels_

# 结果分析

plt.scatter(data_scaled[:, 0], data_scaled[:, 1], c=labels, cmap='viridis')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Customer Segmentation')
plt.show()

在这个案例中,我们使用K-means聚类算法对客户数据进行分群。通过数据标准化和K-means算法,我们可以发现数据中的自然分组。