【机器学习】初学者经典案例(随记)

🎈边走、边悟🎈迟早会好

一、概念

机器学习是一种利用数据来改进模型性能的计算方法,属于人工智能的一个分支。它旨在让计算机系统通过经验自动改进,而不需要明确编程。

类型

  1. 监督学习:使用带标签的数据进行训练,包括分类(如垃圾邮件检测)和回归(如房价预测)。
  2. 无监督学习:使用不带标签的数据进行训练,包括聚类(如客户细分)和降维(如主成分分析)。
  3. 强化学习:通过与环境的交互学习策略,以最大化累积奖励(如AlphaGo)。

二、 常见算法

2.1监督学习算法
  • 线性回归:用于回归任务,假设目标变量与输入特征之间存在线性关系。
  • 逻辑回归:用于二分类任务,输出一个介于0和1之间的概率。
  • 决策树:树状结构的模型,易于理解和解释。
  • 支持向量机(SVM):寻找能够最大化类间间隔的决策边界。
  • K近邻(KNN):基于距离度量的简单算法,预测时考虑最近的K个邻居。
  • 朴素贝叶斯:基于贝叶斯定理的分类算法,假设特征之间条件独立。
2.2无监督学习算法
  • K均值聚类:将数据分成K个簇,使得簇内数据的相似度最大。
  • 层次聚类:构建一个层次结构的聚类树,逐步合并或分割簇。
  • 主成分分析(PCA):将高维数据投影到低维空间,保留数据的主要变异信息。
  • 独立成分分析(ICA):类似于PCA,但假设数据成分相互独立。
2.3强化学习算法
  • Q学习:基于状态-动作对的值函数,通过Q值迭代更新策略。
  • 深度Q网络(DQN):结合深度学习的Q学习算法,用神经网络近似Q值。
  • 策略梯度方法:直接优化策略,使得期望奖励最大化。

三.、模型评估

评估指标
分类:

  • 准确率:正确预测的样本数占总样本数的比例。
  • 精确率:预测为正类的样本中实际为正类的比例。
  • 召回率:实际为正类的样本中被正确预测为正类的比例。
  • F1分数:精确率和召回率的调和平均数。
  • 混淆矩阵:总结预测结果的矩阵,显示真阳性、假阳性、真阴性和假阴性。

回归:

  • 均方误差(MSE):预测值与真实值之差的平方和的平均数。
  • 均方根误差(RMSE):MSE的平方根。
  • 平均绝对误差(MAE):预测值与真实值之差的绝对值的平均数。
  • R²:解释回归模型对数据变异的比例。

交叉验证
通过将数据集划分为若干子集,反复进行训练和验证,以评估模型的性能稳定性和泛化能力。

四、 优化技术

4.1 超参数优化
  • 网格搜索:对所有可能的参数组合进行穷举搜索,找到最佳参数组合。
  • 随机搜索:随机选择参数组合进行搜索,相对高效。
  • 贝叶斯优化:利用贝叶斯推理逐步优化参数选择过程。
4.2 正则化

通过在损失函数中添加正则项,防止过拟合:

  • L1正则化:加入参数的绝对值和(Lasso回归)。
  • L2正则化:加入参数的平方和(Ridge回归)。
4.3 特征选择

选择对模型性能影响较大的特征,去除冗余或相关性高的特征。

五、 常见问题及解决方法

5.1 过拟合与欠拟合
  • 过拟合:模型在训练集上表现良好,但在测试集上表现差。解决方法包括增加数据量、正则化、使用更简单的模型等。
  • 欠拟合:模型在训练集上和测试集上都表现不佳。解决方法包括增加模型复杂度、添加更多特征等。
5.2 数据不平衡

当某一类样本数量远多于其他类时,模型可能偏向于预测多数类。解决方法包括重采样、调整分类阈值、使用加权损失函数等。

 六、入门经典案例

1. 鸢尾花数据集分类(Iris Dataset Classification)
背景

        鸢尾花数据集是机器学习领域中非常经典的数据集,由英国统计学家和生物学家Fisher在1936年提出。该数据集包含150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。目标是根据这些特征将鸢尾花分为三类:山鸢尾(Setosa)、变色鸢尾(Versicolor)和维吉尼亚鸢尾(Virginica)。

过程
  1. 数据预处理:加载数据并进行基本的清洗和探索性数据分析(EDA)。
  2. 特征选择:选择合适的特征来进行分类。
  3. 数据划分:将数据集分为训练集和测试集,一般采用80/20或70/30的比例。
  4. 模型选择:选择合适的分类算法,如K近邻(KNN)、支持向量机(SVM)、决策树(Decision Tree)等。
  5. 模型训练:在训练集上训练模型。
  6. 模型评估:在测试集上评估模型的性能,常用的评估指标包括准确率、混淆矩阵、F1分数等。
  7. 模型优化:根据评估结果进行参数调优或选择其他模型。
详解
# 示例代码(以KNN为例)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix# 加载数据
iris = load_iris()
X = iris.data
y = iris.target# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 模型训练
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)# 模型预测
y_pred = knn.predict(X_test)# 模型评估
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
print("Classification Report:\n", classification_report(y_test, y_pred))
2. 房价预测(Housing Price Prediction)
背景

房价预测是回归问题的经典案例之一,通常使用波士顿房价数据集。该数据集包含506个数据点,每个数据点有13个特征(如房间数量、房龄、犯罪率等),目标是预测房屋的中位数价格。

过程
  1. 数据预处理:加载数据,处理缺失值和异常值,进行EDA。
  2. 特征工程:选择重要特征,并进行特征缩放。
  3. 数据划分:将数据集分为训练集和测试集。
  4. 模型选择:选择回归模型,如线性回归(Linear Regression)、随机森林回归(Random Forest Regression)等。
  5. 模型训练:在训练集上训练模型。
  6. 模型评估:在测试集上评估模型性能,常用评估指标包括均方误差(MSE)、均方根误差(RMSE)等。
  7. 模型优化:根据评估结果进行参数调优或选择其他模型。
详解
# 示例代码(以线性回归为例)
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 加载数据
boston = load_boston()
X = boston.data
y = boston.target# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 模型训练
lr = LinearRegression()
lr.fit(X_train, y_train)# 模型预测
y_pred = lr.predict(X_test)# 模型评估
mse = mean_squared_error(y_test, y_pred)
rmse = mse ** 0.5
print("MSE:", mse)
print("RMSE:", rmse)
3. 手写数字识别(Digit Recognition)
背景

手写数字识别是计算机视觉中的经典问题,通常使用MNIST数据集。该数据集包含60000个训练样本和10000个测试样本,每个样本是28x28像素的灰度图像,代表手写的数字0-9。

过程
  1. 数据预处理:加载数据,并进行基本的图像处理。
  2. 特征工程:将图像数据展平或进行特征提取。
  3. 数据划分:将数据集分为训练集和测试集。
  4. 模型选择:选择分类模型,如卷积神经网络(CNN)、支持向量机(SVM)等。
  5. 模型训练:在训练集上训练模型。
  6. 模型评估:在测试集上评估模型性能,常用评估指标包括准确率、混淆矩阵等。
  7. 模型优化:根据评估结果进行参数调优或选择其他模型。
详解
# 示例代码(以简单的多层感知机为例)
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.utils import to_categorical# 加载数据
(X_train, y_train), (X_test, y_test) = mnist.load_data()# 数据预处理
X_train = X_train.reshape(-1, 28*28).astype('float32') / 255.0
X_test = X_test.reshape(-1, 28*28).astype('float32') / 255.0
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)# 构建模型
model = Sequential([Flatten(input_shape=(28*28,)),Dense(128, activation='relu'),Dense(64, activation='relu'),Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.2)# 评估模型
loss, accuracy = model.evaluate(X_test, y_test)
print("Loss:", loss)
print("Accuracy:", accuracy)

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

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

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

相关文章

队列+二叉树广度优先

题目出自力扣-n叉树的层序遍历 我是原始人,递归写出一道题就只有递归思路,开始的想法是写深搜函数,传一个随着层数递增的int参数q,节点空就return,否则遍历所有节点,每个子节点又以q1为层数递归&#xff…

C++ | Leetcode C++题解之第226题翻转二叉树

题目: 题解: class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) {return nullptr;}TreeNode* left invertTree(root->left);TreeNode* right invertTree(root->right);root->left right;root->right …

js字符串文字添加不同颜色,replace的妙用$1...$9

更改字符串第一个数字为红色显示,第二个数字为黄色显示 $1匹配的是正则第一个括号选中的字符串,可以使用正则不断用括号匹配然后更改样式 const testStr "剩余12个名额,截止时间12月25日" testStr this.testStr.replace(/(\d)(\D…

简单状压dp(以力扣464为例)

目录 1.状态压缩dp是啥? 2.题目分析 3.解题思路 4.算法分析 5.代码分析 6.代码一览 7.结语 1.状态压缩dp是啥? 顾名思义,状态压缩dp就是将原本会超出内存限制的存储改用更加有效的存储方式。简而言之,就是压缩dp的空间。 …

设计模式探索:建造者模式

1. 什么是建造者模式 建造者模式 (Builder Pattern),也被称为生成器模式,是一种创建型设计模式。 定义:将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式要解决的问题: 建造者模…

谷粒商城学习-10-docker安装mysql

文章目录 一,拉取MySQL镜像1,搜索MySQL的Docker镜像2,拉取MySQL镜像3,查看已经拉取的镜像 二,创建、启动MySQL容器1,使用docker run创建启动容器2,使用docker ps查看运行状态的容器3&#xff0c…

力扣-dfs

何为深度优先搜索算法? 深度优先搜索算法,即DFS。就是找一个点,往下搜索,搜索到尽头再折回,走下一个路口。 695.岛屿的最大面积 695. 岛屿的最大面积 题目 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相…

Qt:12.输入类控件(QSpinBox-整数值输入的小部件、QDateEdit、QTimeEdit、QDateTimeEdit- 日期和时间输入的控件)

目录 一、QSpinBox-整数值输入的小部件: 1.1QSpinBox介绍: 1.2属性介绍: 1.3通用属性介绍: 1.4信号介绍: 二、QDateEdit、QTimeEdit、QDateTimeEdit- 日期和时间输入的控件: 2.1QDateEdit、QTimeEdit…

测试面试宝典(一)——你觉得测试和开发需要怎么结合才能使软件的质量得到更好的保障?

“在我看来,测试和开发的有效结合对于保障软件质量至关重要。 首先,在需求分析阶段,测试人员就应该参与进来,与开发人员一起理解软件的需求和功能。这样测试人员可以提前制定测试计划和策略,明确测试的重点和范围。 在…

springboot零食盒子-计算机毕业设计源码50658

目 录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 微信小程序的零食盒子系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 微信…

人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解

大家好,我是微学AI,今天给大家分享一下人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解。 Sklearn(Scikit-learn)是一个基于Python的开源机器学习库,它提供了简单有效的数据挖掘和数据分析工具。Sklearn包含了…

【初阶数据结构】树与二叉树:从零开始的奇幻之旅

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

后VMware时代,一体化技术平台建设思路

在数字化转型的浪潮中,企业对IT基础设施的需求正在发生根本性的变化。VMware时代的结束,为企业带来了重新构建技术平台的机遇与挑战。6月28日,在主题为【聚力生态,VMware全链替代】的线上研讨会上,灵雀云首席解决方案专…

基于Java+Vue的场馆预约系统源码体育馆羽毛球馆篮球馆预约

市场前景 市场需求持续增长:近年来,随着人们生活水平的提高和休闲娱乐需求的多样化,各类场馆(如体育馆、图书馆、博物馆、剧院等)的访问量不断增加。然而,传统的预约方式往往存在效率低下、信息不透明等问…

专注于国产FPGA芯片研发的异格技术Pre-A+轮融资,博将控股再次投资

近日,苏州异格技术有限公司(以下简称“异格技术”)宣布成功完成数亿元的Pre-A轮融资,由博将控股在参与Pre-A轮投资后,持续投资。这标志着继2022年获得经纬中国、红点中国、红杉中国等机构数亿元天使轮融资后&#xff0…

[数仓]四、离线数仓(Hive数仓系统-续)

第8章 数仓搭建-DWT层 8.1 访客主题 1)建表语句 DROP TABLE IF EXISTS dwt_visitor_topic; CREATE EXTERNAL TABLE dwt_visitor_topic (`mid_id` STRING COMMENT 设备id,`brand` STRING COMMENT 手机品牌,`model` STRING COMMENT 手机型号,`channel` ARRAY<STRING> C…

九.核心动画 - 显式动画

引言 本篇博客紧接着上一篇的隐式动画开始介绍显式动画。隐式动画是创建动态页面的一种简单的直接的方式&#xff0c;也是UIKit的动画机制基础。但是它并不能涵盖所有的动画类型。 显式动画 接下来我们就来研究另外一种动画显式动画&#xff0c;它能够对一些属性做指定的动画…

揭秘”大模型加速器”如何助力大模型应用

文章目录 一、大模型发展面临的问题二、“大模型加速器”助力突破困难2.1 现场效果展示2.1.1 大模型加速器——文档解析引擎2.2.2 图表数据提取 三、TextIn智能文档处理平台3.1 在线免费体验3.1.1 数学公式提取3.1.2 表格数据提取 四、acge文本向量化模型4.1 介绍4.2 技术创新4…

从0开始的STM32HAL库学习2

外部中断(HAL库GPIO讲解) 今天我们会详细地学习STM32CubeMX配置外部中断&#xff0c;并且讲解HAL库的GPIO的各种函数。 准备工作&#xff1a; 1、STM32开发板&#xff08;我的是STM32F103C8T6&#xff09; 2、STM32CubeMx软件、 IDE&#xff1a; Keil软件 3、STM32F1xx/ST…

前端使用Vue和Element实现可拖动弹框效果,且不影响底层元素操作,Cesium作为底图(可拖拽的视频实时播放弹框,底层元素可以正常操作)

简述&#xff1a;在前端开发中&#xff0c;弹框和实时视频播放是常见的需求。这里来简单记录一下&#xff0c;如何使用Vue.js和Element UI实现一个可拖动的弹框&#xff0c;并在其中播放实时视频。同时&#xff0c;确保在拖拽弹框时&#xff0c;底层元素仍然可以操作。这里来记…