“探索机器学习的多面世界:从理论到应用与未来展望“

  • 博客主页:誓则盟约
  • 系列专栏:机器学习 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 


目录

一、机器学习基础理论

        1.机器学习的定义与分类

监督学习

 无监督学习

强化学习:

2.数据预处理

数据清洗

特征工程

数据归一化与标准化

3.评估指标 

准确率、召回率、F1 值

均方误差、平均绝对误差

 ROC 曲线、AUC 值

 总结:

“谁不和我们一起就是反对我们,中立的人最危险。” ——《弗拉基米尔-伊里奇-列宁》



一、机器学习基础理论

        1.机器学习的定义与分类

  • 监督学习

        监督学习是机器学习的重要类型。它基于有标记的训练数据进行学习。

        主要任务包括分类和回归。分类用于预测离散的类别标签,比如判断邮件是否为垃圾邮件。回归则用于预测连续的值,例如房价预测。

        常见算法有线性回归、逻辑回归、决策树等。以线性回归为例,其目标是找到一条直线来拟合数据。代码如下:

from sklearn.linear_model import LinearRegression
import numpy as npX = np.array([[1], [2], [3], [4], [5]])
y = np.array([1, 3, 2, 3, 5])model = LinearRegression()
model.fit(X, y)print(model.predict([[6]]))
  •  无监督学习

        无监督学习是机器学习的重要分支,其特点是数据没有明确的标签。其与监督学习有一定的共同点,比如:

  1. 数据基础:两者都依赖于数据进行学习和分析。数据的质量、特征和规模对学习效果都有重要影响。

  2. 目的一致性:最终目标都是从数据中提取有用的信息和模式,以帮助解决实际问题或做出决策。

  3. 技术交叉:某些技术和方法在两种学习方式中可能会有交叉应用。例如,特征选择和提取的方法在监督和无监督学习中都可能用到。

  4. 相互补充:在实际应用中,常常结合使用。先通过无监督学习对数据进行初步探索和预处理,例如发现数据中的隐藏结构或异常值,然后再应用监督学习进行更有针对性的预测和分类任务。

  5. 共同促进:它们的发展相互影响。对监督学习的研究可能启发无监督学习的新方法,反之亦然,共同推动机器学习领域的进步。

        主要包括聚类和降维两大任务。聚类旨在将数据分组,使得同一组内的数据具有较高的相似性,不同组的数据差异较大,常见的聚类算法有 K-Means 算法、层次聚类等。

        降维则是通过减少数据的特征数量,同时尽可能保留重要信息,有助于数据可视化和降低计算复杂度,主成分分析(PCA)是常用的降维方法。

        例如,使用 K-Means 算法进行聚类的简单代码如下:

from sklearn.cluster import KMeans
import numpy as npX = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])kmeans = KMeans(n_clusters=2, random_state=0).fit(X)print(kmeans.labels_)

 总之:无监督学习在数据探索、异常检测等领域有广泛应用。

  • 强化学习:

        强化学习是一种机器学习方法,通过智能体与环境的不断交互来学习最优策略。

其核心要素包括:

  1. 智能体:做出决策和执行动作的主体。
  2. 环境:智能体所处的外部条件,会根据智能体的动作给出反馈。
  3. 奖励:环境给予智能体的反馈信号,用于衡量动作的好坏。

        常见的强化学习算法有 Q-learning 、策略梯度算法等。

        以下是一个简单的 Q-learning 示例代码:

import numpy as np# 环境的状态数量
num_states = 5
# 动作数量
num_actions = 2
# 学习率
learning_rate = 0.1
# 折扣因子
discount_factor = 0.9
# 迭代次数
num_episodes = 1000# 初始化 Q 表
q_table = np.zeros((num_states, num_actions))# Q-learning 算法
for episode in range(num_episodes):state = np.random.randint(0, num_states)while True:action = np.argmax(q_table[state])next_state = np.random.randint(0, num_states)reward = np.random.rand()  # 模拟随机奖励# Q 值更新q_table[state, action] = (1 - learning_rate) * q_table[state, action] + \learning_rate * (reward + discount_factor * np.max(q_table[next_state]))state = next_stateif state == num_states - 1:break

2.数据预处理

  • 数据清洗

        数据清洗是指在数据分析和挖掘过程中对数据进行清理、处理和整理的过程。它包括去除重复数据、处理缺失值、处理异常值、统一数据格式以及其他清理操作,旨在确保数据的准确性、完整性和一致性,从而提高数据的质量和可靠性。

简单的数据清洗流程包括以下步骤:

  1. 去除重复数据:通过识别和删除数据集中的重复行,确保数据集中不包含重复信息。

  2. 处理缺失值:识别数据中的缺失值,并通过填充、删除或插值等方式处理缺失数据,以维持数据集的完整性。

  3. 处理异常值:检测和处理数据中的异常值,可以通过统计方法或基于领域知识进行处理,以保证数据的准确性和稳定性。

  4. 数据格式标准化:统一数据格式,包括日期格式、文本格式、数值格式等,以便后续分析和处理。

代码示例: 

import pandas as pd# 读取数据
data = pd.read_csv('data.csv')# 去除重复数据
data.drop_duplicates(inplace=True)# 处理缺失值
data.dropna(inplace=True)# 处理异常值(假设异常值为超过3倍标准差的数据)
mean = data['column_name'].mean()
std = data['column_name'].std()
data = data[~(data['column_name'] > mean + 3 * std)]# 数据格式标准化(假设日期格式统一为yyyy-mm-dd)
data['date_column'] = pd.to_datetime(data['date_column'], format='%Y-%m-%d')# 保存清洗后的数据
data.to_csv('cleaned_data.csv', index=False)

        这段代码演示了如何使用Pandas库对数据进行简单的清洗操作,包括去重、处理缺失值、处理异常值和数据格式标准化。在实际应用中,清洗操作会根据具体数据和需求进行定制。 


  • 特征工程

        特征工程是将原始数据转换为更能代表问题本质的特征的过程,从而提升模型的性能和效果。

主要包括以下几个方面:

  1. 特征提取:从原始数据中提取有意义的特征。例如,从文本数据中提取词频、词性等特征。
  2. 特征构建:通过组合、变换现有特征来创建新的特征。比如,对两个数值特征进行乘法或加法运算得到新特征。
  3. 特征选择:从众多特征中选择对模型预测最有帮助的特征,去除冗余或无关的特征,以减少计算量和避免过拟合。
  4. 特征缩放:将特征值缩放到一定的范围,例如标准化或归一化,使不同特征在数值上具有可比性。

        以下是一个简单的特征缩放的代码示例,使用 Python 的 sklearn 库进行标准化:

from sklearn.preprocessing import StandardScaler
import numpy as np# 原始数据
data = np.array([[1, -1, 2],[2, 0, 0],[0, 1, -1]])# 创建 StandardScaler 对象
scaler = StandardScaler()# 进行标准化
scaled_data = scaler.fit_transform(data)print(scaled_data)

        打印出的scaled_data是对原始数据进行标准化后的结果。每一列的数据都经过标准化处理,使得数据的均值为0,方差为1。 特征工程在机器学习中至关重要,直接影响模型的学习能力和泛化能力。

  • 数据归一化与标准化

        数据归一化和标准化是数据预处理中常用的两种方法,用于将数据转换到特定的范围或分布,以提高模型的性能和稳定性。

        1. 数据归一化(Min-Max Scaling)

        将数据映射到[0, 1]区间。

        公式:X_normalized = (X - X_min) / (X_max - X_min)

        优点:

                1.对数据的分布没有要求。

                2.保持了原始数据的相对大小关系。

        2. 数据标准化(Z-Score Normalization)

        使数据符合均值为 0,标准差为 1 的标准正态分布。

        公式:X_standardized = (X - X_mean) / X_std

优点:

  1. 适用于数据符合正态分布的情况。
  2. 对异常值的敏感度相对较低。

        以下是使用 Python 的 sklearn 库进行数据归一化和标准化的示例代码:

from sklearn.preprocessing import MinMaxScaler, StandardScaler
import numpy as np# 原始数据
data = np.array([[1, -1, 2],[2, 0, 0],[0, 1, -1]])# 数据归一化
min_max_scaler = MinMaxScaler()
normalized_data = min_max_scaler.fit_transform(data)
print("归一化后的数据:")
print(normalized_data)# 数据标准化
standard_scaler = StandardScaler()
standardized_data = standard_scaler.fit_transform(data)
print("标准化后的数据:")
print(standardized_data)

         在实际应用中,根据数据的特点和模型的需求选择合适的数据缩放方法。

3.评估指标 

  • 准确率、召回率、F1 值

        准确率(Accuracy):表示模型预测正确的结果(包括正例预测正确和负例预测正确)占总预测结果的比例。它反映了模型整体的预测准确性,但在正负例不平衡的情况下可能不太能准确反映模型性能。

公式:准确率 = (正确预测的正例和负例数量) / (总样本数量)

优点:简单直观,易于理解。

局限性:在类别不平衡的情况下,可能会产生误导。例如,如果负例样本数量远远大于正例样本数量,即使模型总是预测为负例,准确率也可能较高,但实际上对正例的预测效果很差。


        召回率(Recall):对于正例,召回率指的是模型正确预测为正例的数量占实际正例总数的比例。召回率重点关注的是模型能够找到多少真正的正例。

公式:召回率 = (正确预测的正例数量) / (实际的正例数量)

优点:关注模型对正例的发现能力。

局限性:单独使用召回率可能会导致模型过度预测为正例,从而引入大量的误报。


        F1 值(F1-score):F1 值是准确率和召回率的综合考量。它是准确率和召回率的调和平均数,用于平衡准确率和召回率在评估模型性能时的重要性。当需要同时兼顾准确率和召回率时,F1 值是一个很有用的指标。

公式:F1 值 = 2 * (准确率 * 召回率) / (准确率 + 召回率)

优点:平衡了准确率和召回率,在需要同时考虑这两个指标时是一个很好的综合评价指标。

        例如,在一个疾病诊断的模型中,如果只追求准确率,可能会导致很多患病的人被漏诊(低召回率);如果只追求召回率,可能会把很多健康的人误诊为患病(低准确率)。而 F1 值可以综合评估模型在这两个方面的表现。


        举个例子,假设要判断一封邮件是否为垃圾邮件,有 100 封邮件,其中 20 封是垃圾邮件。模型预测了 30 封垃圾邮件,其中 15 封确实是垃圾邮件。

        准确率 = (正确预测的垃圾邮件和正常邮件数量)/ 总邮件数量 = (15 + 70)/ 100 = 85%

        召回率 = 正确预测的垃圾邮件数量 / 实际的垃圾邮件数量 = 15 / 20 = 75%

        F1 值 = 2 * (准确率 * 召回率)/ (准确率 + 召回率) ,通过计算得出。

  • 均方误差、平均绝对误差

        1. 均方误差(Mean Squared Error,MSE)

                均方误差是预测值与真实值之差的平方的平均值。

                公式:MSE = (1/n) * Σ (y_pred - y_true)^2

                其中,y_pred 是预测值,y_true 是真实值,n 是样本数量。

        优点:对误差进行了平方,放大了较大误差的影响,使得模型对大误差更加敏感,有助于突出严重的预测错误。

        缺点:对异常值较为敏感。


        2. 平均绝对误差(Mean Absolute Error,MAE)

                平均绝对误差是预测值与真实值之差的绝对值的平均值。

                公式:MAE = (1/n) * Σ |y_pred - y_true|

        优点:对异常值相对不那么敏感,更能反映预测值的平均误差水平。

        缺点:对小误差的重视程度相对较低。

以下是使用 Python 计算均方误差和平均绝对误差的示例代码:

import numpy as npdef mean_squared_error(y_true, y_pred):return np.mean((y_true - y_pred) ** 2)def mean_absolute_error(y_true, y_pred):return np.mean(np.abs(y_true - y_pred))# 真实值
y_true = np.array([1, 2, 3, 4, 5])
# 预测值
y_pred = np.array([1.5, 2.2, 2.8, 4.1, 4.7])print("均方误差:", mean_squared_error(y_true, y_pred))
print("平均绝对误差:", mean_absolute_error(y_true, y_pred))

  •  ROC 曲线、AUC 值

                1. ROC 曲线(Receiver Operating Characteristic Curve)

        ROC 曲线是通过不断改变分类器的阈值,以假正例率(False Positive Rate,FPR)为横轴,真正例率(True Positive Rate,TPR)为纵轴绘制的曲线。

                真正例率(TPR) = 真正例数量 / (真正例数量 + 假反例数量)

                假正例率(FPR) = 假正例数量 / (假正例数量 + 真反例数量)

        ROC 曲线越靠近左上角(即 TPR 高,FPR 低),分类器性能越好。


                2. AUC 值(Area Under the Curve)

        AUC 值是 ROC 曲线下的面积,AUC 值越大,说明分类器的性能越好。AUC = 1 表示完美分类器,AUC = 0.5 表示随机分类器。

        以下是使用 Python 绘制 ROC 曲线和计算 AUC 值的简单示例代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,random_state=42, n_clusters_per_class=1)# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X, y)# 预测概率
y_pred_proba = model.predict_proba(X)[:, 1]# 计算 ROC 曲线的 FPR、TPR 和阈值
fpr, tpr, thresholds = roc_curve(y, y_pred_proba)# 计算 AUC 值
roc_auc = auc(fpr, tpr)# 绘制 ROC 曲线
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()


 总结:

        机器学习理论基础涵盖了多个关键方面:

        首先是机器学习的定义与分类,包括监督学习、无监督学习和强化学习等主要类型,每种类型都有其独特的特点和应用场景。

        在数据处理方面,数据预处理至关重要,涉及数据清理以处理错误、缺失值和重复数据,特征工程用于提取、构建、选择和缩放特征,以及数据归一化和标准化来规范数据。

        评估指标用于衡量模型性能,如准确率、召回率、F1 值用于分类任务,均方误差、平均绝对误差用于回归任务,ROC 曲线和 AUC 值也提供了综合的评估视角。

        这些理论基础为理解和应用机器学习算法,构建有效和可靠的模型提供了必要的知识和工具。

“谁不和我们一起就是反对我们,中立的人最危险。” ——《弗拉基米尔-伊里奇-列宁》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析与机器学习在医疗诊断中的应用

文章目录 📑引言一、数据收集与预处理1.1 数据收集1.2 数据预处理 二、特征选择与构建2.1 特征选择2.2 特征构建 三、模型选择与训练3.1 逻辑回归3.2 随机森林3.3 深度学习 四、模型评估与调优4.1 交叉验证4.2 超参数调优 五、模型部署与应用5.1 模型保存与加载5.2 …

Python:从头创建 Asyncio (2)

引言 现在,asyncio 已成为 Python 社区中的热门话题,并且名副其实——它提供了一种非常出色的处理 I/O 密集型程序的方法!在我探索 asyncio 的过程中,我起初并不太明白它的工作原理。但随着深入学习,我意识到 asyncio …

Java 反射机制 -- Java 语言反射的概述、核心类与高级应用

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 010 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…

GitLab教程(二):快速上手Git

文章目录 1.将远端代码克隆到本地2.修改本地代码并提交到远程仓库3.Git命令总结git clonegit statusgit addgit commitgit pushgit log 首先,我在Gitlab上创建了一个远程仓库,用于演示使用Gitlab进行版本管理的完整流程: 1.将远端代码克隆到本…

导出 Whisper 模型到 ONNX

前言 在语音识别领域,Whisper 模型因其出色的性能和灵活性备受关注。为了在更多平台和环境中部署 Whisper 模型,导出为 ONNX 格式是一个有效的途径。ONNX(Open Neural Network Exchange)是一个开放格式,支持不同的深度…

吴恩达2022机器学习专项课程C2W3:2.25 理解方差和偏差(诊断方差偏差正则化偏差方案搭建性能学习曲线)

目录 引言名词替代影响模型偏差和方差的因素1.多项式阶数2.正则化参数 判断是否有高偏差或高方差1.方法一:建立性能基准水平2.方法二:建立学习曲线 总结 引言 机器学习系统开发的典型流程是从一个想法开始,然后训练模型。初次训练的结果通常…

今日分享丨inBuilder低代码平台打印格式设计器

打印在企业日常办公中占据核心地位,是处理各种关键文件不可或缺的一环。无论是签署合同、报销费用、记录凭证与账表、处理回单与库存单据、开出库单据,还是开具发票、制作条码与标签,打印都发挥着至关重要的作用,确保企业运营的高…

rv1126-rv1109-串口显示路径不变化

串口只有#, 后来看了教程改成如下 但是没有变化,那个路径都只显示rootLonbon# 于是最后改成了这样 因为:

linux 安装sftp及使用sftp上传和下载

一、centos7 安装sftp 1.安装 OpenSSH 服务: sudo yum install openssh-server2.启动 SSH 服务,并设置为开机启动: sudo systemctl start sshd sudo systemctl enable sshd3.创建一个新用户,用于SFTP连接(替换your_…

【C++高阶】C++继承学习手册:全面解析继承的各个方面

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:模板进阶 🌹🌹期待您的关注 🌹🌹 继承 📖1. 继承的概念及定义…

MPLS提高网络服务质量的原理

MPLS(Multiprotocol Label Switching,多协议标签交换)是一种网络技术,它能够提高网络的服务质量(Quality of Service,QoS)以及整体性能。MPLS通过以下几种方式来提升网络服务质量:标…

220v转3v用多大电阻

在设计一个电压转换电路,将220V交流(AC)电压转换为3V直流(DC)电压时,我们需要考虑几个关键因素,包括安全、效率和电路的稳定性。AH8651是一款DC-DC转换器,通常用于将较高的输入电压转…

如何基于 Python 快速搭建 QQ 开放平台 QQ 群官方机器人详细教程(更新中)

注册 QQ 开放平台账号 账号注册 QQ 机器人:一个机器人可以被添加到 群聊/频道 内对话,QQ 用户也可以直接跟机器人 单独对话。 开发者账号主体要求 单聊对话:【定向邀请】 群聊场景:仅支持企业主体【个人主体暂不支持】 频道场…

笔记98:按列压缩矩阵 csc_matrix 的 “含义”

1. 如何按列压缩矩阵: 注:按列压缩(Compressed Sparse Column -- CSC),是一种使用三个特征数组就可以表示整个矩阵的方法; 标准二次规划问题 :状态量:矩阵:向量&#xff…

Linux内核驱动入门 编译环境搭建、编译内核

文章目录 前言搭建内核驱动编译环境下载交叉编译工具编译内核minicom工具使用找不到ttyUSB设备问题编译内核编译报错解决小坑编译选项说明 从零开始的驱动程序 前言 哎…有时候我都不知道自己是干啥的 说是运维吧,docker不会,k8s不会;说是驱…

【安卓】在安卓中使用HTTP协议的最佳实践

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

领夹无线麦克风哪个品牌好?分享麦克风什么牌子的音质比较好!

​无线领夹麦克风作为现代音频技术的杰出代表,正逐渐改变着我们的声音表达方式。它以其独特的便携性、稳定性和高音质,成为了众多声音创作者的首选工具。面对市场上琳琅满目的无线领夹麦克风选项,找到一款贴合个人需求的设备无疑是一项挑战。…

万字长文爆肝Spring(一)

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用 1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? …

金融科技助力绿色金融:可持续发展新动力

随着全球气候变化和环境问题的日益严重,绿色金融作为推动环境保护和经济可持续发展的重要手段,已经受到越来越多的关注。而金融科技,作为科技与金融深度融合的产物,正以其独特的优势为绿色金融的发展注入新动力。本文将探讨金融科…

Vue 路由:一级路由,嵌套路由

1、安装路由插件,因为用的是vue2 所以路由版本要和vue2对应上,所有有3 yarn add vue-router3 2、在main.js里引入 import VueRouter from vue-router Vue.use(VueRouter) 3、新建文件夹 router,创建index.js 4、引入路由插件,并且暴露出来这个路由 5、在…