机器学习核心:监督学习与无监督学习

news/2024/10/23 3:14:36/

个人主页:chian-ocean

文章专栏

监督学习与无监督学习:深度解析

学习>机器学习是现代人工智能的核心支柱,已广泛应用于从数据挖掘到计算机视觉再到自然语言处理的诸多领域。作为学习>机器学习最主要的两大类型,监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)构成了不同应用需求的基础。本篇文章将深度探讨这两种学习范式的理论、应用场景、以及各种常见算法的实现,并通过详细的代码实例帮助读者掌握其中的精髓。

目录

  1. 什么是监督学习
  2. 什么是无监督学习
  3. 监督学习的实现
    • 线性回归
    • 决策树
  4. 无监督学习的实现
    • K均值聚类
    • 主成分分析
  5. 监督学习与无监督学习的对比
  6. 总结与思考

什么是监督学习

在这里插入图片描述

监督学习是一种基于已标记数据进行训练的学习方式。在训练过程中,算法会接受输入数据及其对应的标签(或者称为输出),以此来学习输入和输出之间的关系。其主要目的是找到一个从输入到输出的映射函数,使得模型能够对新数据进行预测。

监督学习可以进一步分为:

  • 分类:将输入分配到离散的类别中,例如垃圾邮件检测。
  • 回归:预测连续的数值输出,例如预测房价。

监督学习的应用

监督学习在许多领域中都有广泛的应用,包括但不限于:

  • 医疗诊断:基于病患数据预测疾病种类。
  • 金融预测:如股票价格、市场走势预测。
  • 自然语言处理:如文本情感分析、语音识别等。
  • 计算机视觉:物体识别、面部识别等。

监督学习的算法概述

监督学习的经典算法包括:

  • 线性回归:适用于预测连续型变量。
  • 逻辑回归:一种用于二元分类的线性模型。
  • 决策树:基于树状结构的决策算法,简单直观。
  • 随机森林:决策树的集成模型,用于提升模型的准确性和鲁棒性。
  • 支持向量机:通过寻找最佳分隔超平面来进行分类。

接下来,我们将通过代码详细实现其中一些典型的算法。

什么是无监督学习

与监督学习不同,无监督学习是在没有标签的数据集上进行训练的学习方式。其主要目的是发现数据中的结构、模式、或者隐藏的关系。无监督学习更加关注数据的内部相似性和聚集特征,通常用于数据探索和降维。

无监督学习主要包括:

  • 聚类:将相似的数据点归为一类,例如客户细分。
  • 降维:将高维数据投射到低维空间,以便于可视化和处理,例如主成分分析(PCA)。

无监督学习的应用

无监督学习的应用包括:

  • 客户细分:在市场营销中,根据客户特征进行分群。
  • 图像压缩:通过提取主要特征来降低图像的维度。
  • 异常检测:发现数据中不寻常的模式,如信用卡欺诈检测。

无监督学习的算法概述

常见的无监督学习算法有:

  • K均值聚类:将数据集分为K个簇,使得每个簇内的数据点相似度较高。
  • 层次聚类:逐层构建数据的层次结构。
  • 主成分分析(PCA):用于数据降维和特征提取。
  • 自编码器:一种神经网络用于学习数据的有效编码。

接下来,我们通过代码实现一些无监督学习中的经典算法。

监督学习的实现

线性回归

线性回归是一种用于回归问题的简单而有效的算法。它假设输入特征和输出之间存在线性关系。以下是使用scikit-learn实现线性回归的代码。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 生成示例数据
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)# 拆分训练集和测试集
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)# 绘制结果
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.plot(X_test, y_pred, color='red', label='Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

决策树

决策树是一种基于树状结构的监督学习算法。它通过学习数据中的规则来构建树模型,从而进行预测。以下是一个简单的决策树分类器的实现。

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import matplotlib.pyplot as plt# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target# 创建决策树模型并进行训练
clf = DecisionTreeClassifier(max_depth=3)
clf.fit(X, y)# 可视化决策树
tree.plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()

在上述代码中,我们利用DecisionTreeClassifier对经典的鸢尾花数据集进行了训练,并通过plot_tree()方法对生成的决策树进行可视化。

无监督学习的实现

K均值聚类

K均值聚类是一种无监督学习算法,它通过反复迭代将数据点分为K个簇。以下是K均值聚类的实现。

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 生成示例数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=0)# 使用K均值聚类
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)# 获取簇中心和簇标签
centroids = kmeans.cluster_centers_
labels = kmeans.labels_# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow', s=30)
plt.scatter(centroids[:, 0], centroids[:, 1], s=300, c='black', marker='X')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('K-means Clustering')
plt.show()

在此代码中,我们生成了一组二维数据,使用K均值聚类算法将数据分为4个簇,并通过图形化方式展示聚类结果。

主成分分析

**主成分分析(PCA)**是一种常用的降维方法,特别适合处理高维数据。它通过寻找数据的主要成分,将数据降到低维空间。以下是使用PCA对鸢尾花数据集进行降维的实现。

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载鸢尾花数据集
iris = load_iris()
X = iris.data# 使用PCA降维到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 可视化降维后的数据
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=iris.target, cmap='viridis', s=50)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Iris Dataset')
plt.show()

监督学习与无监督学习的对比

特性监督学习无监督学习
数据集带标签的数据无标签的数据
目标预测目标输出发现数据内在结构
主要任务分类和回归聚类和降维
应用场景邮件分类、图像识别客户分群、特征提取
复杂性需要标注大量数据数据解释难度较大

从上述对比中可以看出,监督学习更适合有明确目标的任务,如分类和回归问题。而无监督学习更适合对数据进行探索、发现隐藏模式的场景。

总结与思考

本文详细探讨了监督学习与无监督学习的理论和应用,介绍了它们在不同任务中的适用场景,并通过代码实例演示了经典算法的实现。监督学习更适合解决需要明确预测目标的任务,如分类和回归,而无监督学习则专注于数据结构的发现,如聚类和降维。

学习>机器学习的世界广袤而丰富,监督学习和无监督学习只是其中的两块基石。对于希望深入学习>机器学习领域的读者来说,掌握这两类学习方式的核心思想和实践技巧是非常重要的。在实际应用中,选择合适的算法,理解其优缺点,并结合具体场景进行调优,才能真正发挥学习>机器学习的潜力。

希望通过这篇文章,大家能对监督学习与无监督学习有更加深刻的理解,并在自己的项目中应用这些知识,解决实际问题。如果你想更深入地探讨某个算法,或者想了解更多关于其他类型学习>机器学习(如半监督学习或强化学习)的内容,请随时联系我,一起探索更广阔的学习>机器学习世界。


http://www.ppmy.cn/news/1541220.html

相关文章

十一、【智能体】一键生成文章!秒懂!一篇搞定智能体工作流核心操作,轻松上手!效率飙升N倍!

工作流 是扣子的核心,所有的业务都会在工作流中进行呈现。 简单来说呢,扣子中的工作流就像是一个有步骤的任务流程。 工作流就是把一个大任务分成一个个小的步骤,每个步骤都有特定的事情要做,而且这些步骤是有先后顺序的。 这样…

【leetcode|哈希表、动态规划】最长连续序列、最大子数组和

目录 最长连续序列 解法一:暴力枚举 复杂度 解法二:优化解法一省去二层循环中不必要的遍历 复杂度 最大子数组和 解法一:暴力枚举 复杂度 解法二:贪心 复杂度 解法三:动态规划 复杂度 最长连续序列 输入输…

【Linux】-权限

🔑🔑博客主页:阿客不是客 🍓🍓系列专栏:深入代码世界,了解掌握 Linux 欢迎来到泊舟小课堂 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 ​ 一、权限的概念 在Linux 中&…

npm 中的 package.json 实践

package.json 是现在前端项目必备的文件,涵盖了项目依赖、项目命令、项目信息等内容。下面是一个 package.json 常有的样子。 {"name": "my_package","version": "1.0.1","description": "make your packa…

【C++】创建TCP客户端

目录 一、实现发送字符串功能 二、实现接收字符串功能 三、客户端接收乱码问题 四、客户端发送乱码问题 五、客户端接收到数据时进行回调 六、子线程接收数据 七、发送Json格式数据 源码 一、实现发送字符串功能 头文件 #pragma once #include <iostream> #inc…

使用pyqt创建一个移动的矩形

使用pyqt创建一个移动的矩形 程序功能概述效果详细代码 程序功能概述 程序的主要功能是在一个窗口内绘制一个矩形框&#xff0c;并使这个矩形框能够以固定的速度向右移动。当矩形框移动出窗口右侧边界时&#xff0c;它会重新出现在窗口的左侧。 效果 详细代码 import sys fr…

【C++】— 一篇文章让你认识STL

文章目录 &#x1f335;1.什么是STL&#xff1f;&#x1f335;2.STL的版本&#x1f335;3.STL的六大组件&#x1f335;4.STL的重要性&#x1f335;5. 如何学习STL&#x1f335;6. 学习STL的三种境界 &#x1f335;1.什么是STL&#xff1f; STL是Standard Template Library的简称…

Leetcode - 周赛419

目录 一&#xff0c;3318. 计算子数组的 x-sum I 二&#xff0c;3319. 第 K 大的完美二叉子树的大小 三&#xff0c;3320. 统计能获胜的出招序列数 四&#xff0c;3321. 计算子数组的 x-sum II 一&#xff0c;3318. 计算子数组的 x-sum I 本题数据范围较小&#xff0c;可以…