机器学习


简单的说,机器学习是一种让计算机系统从数据中学习并自动改进的算法。通俗地说,机器学习就是让计算机从数据中“学习”,并使用这些学习成果来做出决策或预测。

学术解释中,机器学习被定义为一种通过算法让计算机自动学习数据模型和模式,从而实现特定任务的技术。机器学习的主要目标是让计算机在未经过明确编程的情况下自动获取数据模型,从而能够识别、分类和预测未知的数据。

机器学习可以分为监督学习、无监督学习、半监督学习和强化学习等几种主要类型。

监督学习:

  • 线性回归(Linear Regression)
  • 逻辑回归(Logistic Regression)
  • 支持向量机(Support Vector Machine,SVM)
  • 决策树(Decision Tree)
  • 随机森林(Random Forest)
  • 梯度提升树(Gradient Boosting Tree)
  • 神经网络(Neural Networks)
  • 卷积神经网络(Convolutional Neural Networks,CNN)
  • 递归神经网络(Recurrent Neural Networks,RNN)
  • 长短时记忆网络(Long Short-Term Memory,LSTM)

无监督学习:

  • K均值聚类(K-means Clustering)
  • 层次聚类(Hierarchical Clustering)
  • 期望最大化算法(Expectation-Maximization,EM)
  • 主成分分析(Principal Component Analysis,PCA)
  • 自编码器(Autoencoder)
  • 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)

半监督学习:

  • 半监督分类(Semi-supervised Classification)
  • 标签传播(Label Propagation)
  • 生成式半监督学习(Generative Semi-supervised Learning)

线性回归(Linear Regression)

线性回归是一种广泛使用的机器学习算法,用于建立输入变量和输出变量之间线性关系的模型。它是一种有监督学习算法,常用于解决回归问题。

在线性回归中,我们尝试通过一个线性方程来描述输入变量与输出变量之间的关系,这个方程被称为线性回归模型。线性回归模型通常用最小二乘法来计算最佳拟合直线,即通过所有训练数据点的一条直线,使得这条直线到所有数据点的距离平方和最小化。在实际应用中,可以使用梯度下降等优化算法来训练模型。

线性回归可以用于多种任务,例如预测股票价格、房价、销售额等连续的数值型数据。除了标准的线性回归模型,还有一些变种,例如多元线性回归、逻辑回归等。

多元线性回归(Multiple Linear Regression)是线性回归的一个扩展,用于建立多个输入变量和输出变量之间线性关系的模型。在多元线性回归中,我们使用多个输入变量来预测一个输出变量。

多元线性回归(Multiple Linear Regression)

多元线性回归是线性回归的一个扩展,用于建立多个输入变量和输出变量之间线性关系的模型。在多元线性回归中,我们使用多个输入变量来预测一个输出变量。

多元线性回归的模型可以表示为:

y = β0 + β1x1 + β2x2 + ... + βnxn + ε

其中 y 是输出变量,x1, x2, ..., xn 是输入变量,β0, β1, β2, ..., βn 是模型的系数,ε 是误差项。

多元线性回归是一种常见的机器学习算法,它是线性回归的一种扩展形式。与简单线性回归只涉及一个自变量不同,多元线性回归可以处理多个自变量的情况。

在多元线性回归中,我们假设输入变量 x1, x2, ..., xn 与输出变量 y 之间存在线性关系。然后,通过给定的样本数据,使用最小二乘法或者其他优化算法来求解出系数 β0, β1, β2, ..., βn 的值,使得模型的预测值尽可能接近真实值。

需要注意的是,多元线性回归的一个前提假设是各个输入变量之间是独立的。如果输入变量之间存在高度相关的情况,那么模型的预测效果可能会变得不稳定。此外,还需要注意过拟合和欠拟合问题,避免模型在训练集和测试集上的表现出现过大的差异。

多元线性回归在实际应用中非常广泛,比如预测房价、销售额、股票价格等等。

逻辑回归(Logistic Regression)


逻辑回归是一种用于解决分类问题的机器学习算法。它基于线性回归模型,但是将输出变量限制在0和1之间,用于表示两个分类标签。逻辑回归常用于二分类问题,例如判断邮件是否是垃圾邮件、判断用户是否会购买某种产品等。

逻辑回归(Logistic Regression)是一种用于建立分类模型的机器学习算法。它将一组输入变量 x1, x2, ..., xn 映射到一个介于 0 和 1 之间的输出变量 y。逻辑回归模型可以表示为以下公式:

y = 1 / (1 + e-(b0 + b1*x1 + b2*x2 + ... + bn*xn))

其中,b0、b1、b2、...、bn 是模型的系数,e 是自然对数的底数。这个公式将线性回归的结果通过逻辑函数映射到了 0 和 1 之间,表示为概率值,可以用于分类问题。如果 y 大于 0.5,则将其分类为 1,否则分类为 0。

逻辑回归的训练过程通常采用最大似然估计方法。给定一个训练集,我们希望找到一组系数 b0、b1、b2、...、bn,使得模型对于训练集的预测值 y 与实际值 t 的差别最小。具体地,我们定义一个损失函数(loss function):

L(b0, b1, b2, ..., bn) = -1/N * sum(t * log(y) + (1-t) * log(1-y))

其中,N 是训练集中样本的数量,t 是实际的标签值(0 或 1),y 是模型对该样本的预测值。该损失函数称为交叉熵(cross-entropy)损失函数,它刻画了模型预测值与实际标签值之间的差异。我们的目标是找到一组系数 b0、b1、b2、...、bn,使得损失函数最小。这可以通过梯度下降(gradient descent)算法来实现。梯度下降算法是一种迭代算法,每次迭代通过计算损失函数对系数的偏导数来更新系数的值,直到达到收敛条件。

当我们使用逻辑回归进行分类时,我们假设输出变量Y服从伯努利分布,其参数p与输入变量x有关,我们需要估计p值。因为p的取值是0到1之间的实数,所以我们需要一个函数f(x) 将输入x映射到0到1之间的实数。这个函数就是逻辑函数(logistic function),也叫sigmoid函数,可以表示为:

sigmoid 函数的定义为:

sigmoid(z) = 1 / (1 + e-z)

其中,z 表示输入变量的线性组合,即:

z = β0 + β1x1 + β2x2 + ... + βnxn

y 表示输出变量的概率值,β0, β1, β2, ..., βn 表示模型的系数,x1, x2, ..., xn 表示输入变量,ε 表示误差项。

支持向量机(Support Vector Machine,SVM)

支持向量机是一种二分类模型,其基本模型定义在特征空间上的间隔最大的线性分类器,通过非线性变换,支持向量机可以学习非线性模型。支持向量机最早是针对线性可分情形提出的,通过软间隔最大化可以推广到线性不可分情形。

在支持向量机中,将特征空间上的点看作是定义在这个空间上的向量,将分类问题转化为在特征空间中寻找最优的分离超平面(最大间隔超平面)。最大间隔超平面是指,能够将特征空间中不同类别的样本分隔开,并且两侧的样本到超平面的距离(即间隔)最大。

对于线性可分情形,最大间隔超平面是唯一的,支持向量机通过学习最大间隔超平面得到一个分类模型。而对于线性不可分情形,需要通过引入“软间隔”(即允许部分样本分类错误)或者通过映射到高维特征空间进行非线性分类,来解决这个问题。

支持向量机的优点是可以处理高维度数据,对于训练数据量不大的情况下也有很好的表现。其缺点是对于大规模的数据集训练较慢,且对于噪声较多的数据集可能会出现过拟合的情况。

随机森林(Random Forest)

随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,它基于决策树(Decision Tree)构建。随机森林通过在数据集上随机抽取特征和样本来构建多个决策树,然后对这些决策树进行投票或取平均值来得出最终的预测结果。

随机森林的主要优点包括:

随机抽样使得随机森林对于异常值和噪声具有很好的鲁棒性;

可以处理高维数据,并且不需要进行特征选择;

在训练过程中,随机森林可以评估特征的重要性程度。

随机森林的缺点包括:

随机森林对于高度相关的特征可能会产生偏差;

随机森林的训练时间比较长,特别是对于大规模数据集来说。

随机森林的核心思想是:通过组合多个决策树,来降低单个决策树的过拟合和泛化能力不足的问题。在构建随机森林的过程中,通常会随机抽取特征和样本,以增加决策树之间的差异性。当进行预测时,随机森林会将所有决策树的预测结果进行综合,以得出最终的预测结果。

随机森林的训练过程通常包括以下步骤:

从训练集中随机抽取 m 个样本和 \(n\) 个特征,其中 \(m\) 是样本数量,\(n\) 是特征数量;

使用这 \(m\) 个样本和 \(n\) 个特征来训练一个决策树;

重复步骤 1 和 2,构建 \(k\) 个决策树;

对于回归问题,将 \(k\) 个决策树的预测结果取平均值,对于分类问题,将 \(k\) 个决策树的预测结果进行投票,以得出最终的预测结果。

随机森林中的一个重要参数是决策树的数量 \(k\),通常需要通过交叉验证等方法来选择最优的 \(k\)。此外,随机森林还可以通过评估特征的重要性程度来进行特征选择。

当建立随机森林模型时,通常需要确定一些参数。以下是几个重要的参数:

n_estimators: 随机森林中决策树的数量。

max_depth: 决策树的最大深度。如果设为None,则决策树会一直生长,直到叶子节点中只剩下少于min_samples_split个样本点。

min_samples_split: 内部节点(非叶子节点)进行划分所需的最小样本数。

min_samples_leaf: 叶子节点中需要至少包含的样本数。

max_features: 每个决策树在拆分节点时考虑的最大特征数。

bootstrap: 布尔值,表示是否在建立每个决策树时使用随机有放回抽样。

以上参数中,n_estimators和max_features对于随机森林的性能影响最大。一般情况下,增加n_estimators可以提高模型的准确度,但同时也增加了计算复杂度和内存消耗;max_features的增加可以增加随机性,避免过拟合,但是在特征数量非常多的情况下,选择适当的max_features可能会提高性能。

除了上述参数外,随机森林还可以通过OOB(out-of-bag)误差评估模型的性能,以及通过特征重要性(feature importance)选择重要的特征。

以下是一个简单的随机森林的Python样例:

# 导入需要的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score # 读取数据
data = pd.read_csv('data.csv') # 将数据集分为训练集和测试集
train_data, test_data, train_label, test_label = train_test_split(data.iloc[:, :-1], data.iloc[:, -1], test_size=0.2, random_state=42) # 创建随机森林模型
rf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42) # 训练模型
rf.fit(train_data, train_label) # 预测测试集数据
predict_label = rf.predict(test_data) # 计算模型准确率
accuracy = accuracy_score(test_label, predict_label) # 输出准确率
print('Accuracy:', accuracy)

代码中用到的库及其作用:

pandas:用于数据处理,可以读取和处理数据;

sklearn:用于机器学习,包含了多种算法和模型;

train_test_split:用于将数据集分为训练集和测试集,其中test_size参数表示测试集所占比例;

RandomForestClassifier:随机森林分类器模型,n_estimators表示森林中树的数量,max_depth表示每棵树的最大深度;

accuracy_score:用于计算模型的准确率;

print:用于输出结果。

简单解释一下代码的流程:

首先读取数据,可以是csv、excel等格式的文件;

然后将数据集分为训练集和测试集,其中test_size参数表示测试集所占比例,random_state参数表示随机数生成器的种子,用于保证每次运行的结果一致;

接着创建一个随机森林模型,其中n_estimators表示森林中树的数量,max_depth表示每棵树的最大深度;

使用训练集对模型进行训练;

对测试集进行预测,并计算模型的准确率;

最后输出准确率。

梯度提升树(Gradient Boosting Tree,GBT)


梯度提升树(Gradient Boosting Tree,GBT)是一种集成学习方法,也是一种基于决策树的回归和分类算法。与随机森林不同,GBT的每棵决策树是通过利用先前树的残差来构建的。

具体来说,在GBT中,我们首先拟合一个简单的基础模型(例如,一个单节点的决策树)来预测目标变量。然后,我们计算残差(目标值减去预测值)并使用残差来训练另一棵树。接着,我们将新树的预测值与先前的预测值相加,并再次计算残差。我们继续这个过程,直到达到预定的树的数量或训练误差已经无法减小为止。

在预测阶段,GBT将所有树的预测值相加以获得最终的预测值。因为每棵树的预测值只是先前预测值和新树预测值的加和,所以预测结果是一种“加权投票”的形式。

GBT是一种强大的算法,通常在各种回归和分类问题上都能表现良好。与其他机器学习算法一样,GBT需要仔细调整其超参数,以获得最佳性能。

梯度提升树的主要思想是迭代地训练决策树,并将每个新的决策树的预测结果与真实值之间的误差用来训练下一个决策树。这种迭代的过程类似于梯度下降,因此称为“梯度提升”。具体地,梯度提升树的算法流程如下:

1.初始化:将所有样本的真实值作为初始预测值 \(\hat{y}_0\)。

2.迭代生成决策树:依次生成多棵决策树 \(h_1, h_2, \dots, h_M\),并将它们的预测结果累加起来,得到最终的预测值 \(\hat{y}M\)。每次生成新的决策树时,都要使它的预测结果尽可能地接近真实值 \(y\),即对训练集的残差进行拟合,其中残差 \(r_i = y_i - \hat{y}{i, m-1}\)。

3.计算残差:对于第 \(m\) 棵树,计算每个样本的残差 \(r_{i,m} = y_i - \hat{y}{i,m-1}\),其中 \(\hat{y}{i,m-1}\) 是前 \(m-1\) 棵树对样本 \(i\) 的预测值。

4.拟合残差:用残差作为新的响应变量,训练一棵新的决策树 \(h_m\)。

5.更新预测值:将新生成的决策树的预测结果加到前面的预测结果中,得到新的预测值 \(\hat{y}m = \hat{y}{m-1} + h_m\)。

6.重复步骤 3-5,直到达到预设的树的数量或者训练误差满足某个停止条件为止。

梯度提升树是一种强大的预测模型,通常在各种回归和分类问题上表现良好。与随机森林相比,梯度提升树更加灵活,能够更好地适应复杂的非线性关系。但是,与随机森林相比,梯度提升树的训练时间更长,并且更容易过拟合。因此,在选择模型时需要根据具体的问题进行权衡。

[AI-ML]机器学习是什么?一起了解!(一)的更多相关文章

  1. AI和机器学习对云应用的安全产生了何种影响?

    AI和机器学习对云应用的安全产生了何种影响? 正如其他许多新兴技术一样,AI是一把双刃剑,它对于云计算的安全影响是双重的:这项技术可以使工作负载变得更加安全,但也可能会为新的威胁打开大门. 出现这种分 ...

  2. 一张图看懂AI、机器学习和深度学习的区别

    AI(人工智能)是未来,是科幻小说,是我们日常生活的一部分.所有论断都是正确的,只是要看你所谈到的AI到底是什么. 例如,当谷歌DeepMind开发的AlphaGo程序打败韩国职业围棋高手Lee Se ...

  3. 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退

    AI早期成就,相对朴素形式化环境,不要求世界知识.如IBM深蓝(Deep Blue)国际象棋系统,1997,击败世界冠军Garry Kasparov(Hsu,2002).国际象棋,简单领域,64个位置 ...

  4. 人工智能和机器学习 AI&ML howto

    我关心的AI.ML的分支领域: 我的博客:Deep Learning 和 Knowledge Graph howto (有关DL&KG的资料都在这里) https://www.cnblogs. ...

  5. AI、机器学习、深度学习、神经网络

    1.AI:人工智能(Artificial Intelligence) 2.机器学习:(Machine Learning, ML) 3.深度学习:Deep Learning 人工功能的实现是让机器自己学 ...

  6. AI ML DL

    在经历了蛮荒的PC互联网时代,混战的移动互联网时代,到现今最火的人工智能时代. 大数据.云计算.机器学习的技术应用,已经使得IT从业者的门槛越来越高. 套用一句樊登读书会的宣传口号“keep lear ...

  7. 痞子衡嵌入式:ARM Cortex-M内核那些事(3.3)- 为AI,ML而生(M55)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M55. 鼠年春节,大家都在时刻关心 2019nCoV 疫情发展,没太多心思搞技术,就在这个时候,ARM 不声不响 ...

  8. Core ML 机器学习

    在WWDC 2017开发者大会上,苹果宣布了一系列新的面向开发者的机器学习 API,包括面部识别的视觉 API.自然语言处理 API,这些 API 集成了苹果所谓的 Core ML 框架.Core M ...

  9. AI学习--机器学习概述

    学习框架 01-人工智能概述 机器学习.人工智能与深度学习的关系 达特茅斯会议-人工智能的起点 机器学习是人工智能的一个实现途径深度学习是机器学习的一个方法发展而来(人工神经网络) 从图上可以看出,人 ...

  10. Spark ML机器学习

    Spark提供了常用机器学习算法的实现, 封装于spark.ml和spark.mllib中. spark.mllib是基于RDD的机器学习库, spark.ml是基于DataFrame的机器学习库. ...

随机推荐

  1. 关于CSDN微信登录接口的研究

    代码 import requests import re from threading import Thread import time import requests from io import ...

  2. 【Java SE】Day05数组

    一.数组的定义和访问 1.初始化 动态new int[10];--默认值 静态new int[]{1,2,3};,省略为{1,2,3}; 2.访问 长度arr.length属性(数组的属性) 打印数组 ...

  3. Android ViewPager2 + TabLayout + BottomNavigationView

    Android ViewPager2 + TabLayout + BottomNavigationView 实际案例 本篇主要介绍一下 ViewPager2 + TabLayout + BottomN ...

  4. CKA考试经验:报考和考纲

    1 报考相关 1.有效期一年.在一年内需要定好考试的时间. 2.提前15分钟进入考试系统, 提前进入考试系统后并不是立马开始考试,而是预留给考官时间考察你的考试环境 3.考试时间 ,注意报考的Time ...

  5. bug处理记录:Error running 'WorkflowApplication': Command line is too long. Shorten command line for WorkflowApplication or also for Spring Boot default configuration?

    1.报错信息 Error running 'WorkflowApplication': Command line is too long. Shorten command line for Workf ...

  6. live-player live-pusher惨案

    昨天遇到的问题,旧项目: 一个页面同时使用live-player和live-pusher时候遇到的问题,live-pusher正常,live-player无效,没有任何报错 打log 所有livepl ...

  7. 数值计算:前向和反向自动微分(Python实现)

    1 自动微分 我们在<数值分析>课程中已经学过许多经典的数值微分方法.许多经典的数值微分算法非常快,因为它们只需要计算差商.然而,他们的主要缺点在于他们是数值的,这意味着有限的算术精度和不 ...

  8. sqlSession封装以及CRUD的实现

    sqlSession封装以及CRUD的实现 封装MyBatisUtil dao 定义方法 映射文件写sql语句 daoimpl实现类 实现方法 test类测试方法 整体结构

  9. Django(2) - Django模板

    1.Django模板介绍 基础概念 模板是具有一定的格式或骨架,可以动态的生成HTML 模板引擎决定以何种方式组织代码 一个项目可以有一个或者是多个模板引擎,Django里面主要两个模板引擎:DTL. ...

  10. WCF 服务容器化的一些问题

    背景 目前项目当中存有 .NET Framework 和 .NET Core 两种类型的项目,但是都需要进行容器化将其分别部署在 Windows 集群和 Linux 集群当中.在 WCF 进行容器化的 ...