机器学习算法 订阅
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 [1]  它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。 展开全文
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 [1]  它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
信息
外文名
Machine Learning Algorithm
领    域
多领域交叉学科
应用学科
概率论、统计学、逼近论
中文名
机器学习算法
应    用
智能控制、图形图像处理
机器学习算法发展史
机器学习是人工智能研究较为年轻的分支,它的发展过程大体上可分为4个时期。第一阶段是在20世纪50年代中叶到60年代中叶,属于热烈时期。第二阶段是在20世纪60年代中叶至70年代中叶,被称为机器学习的冷静时期。第三阶段是从20世纪70年代中叶至80年代中叶,称为复兴时期。 [2]  机器学习的最新阶段始于1986年。机器学习进入新阶段的重要表现在下列诸方面:(1) 机器学习已成为新的边缘学科并在高校形成一门课程。它综合应用心理学、生物学和神经生理学以及数学、自动化和计算机科学形成机器学习理论基础。(2) 结合各种学习方法,取长补短的多种形式的集成学习系统研究正在兴起。特别是连接学习符号学习的耦合可以更好地解决连续性信号处理中知识与技能的获取与求精问题而受到重视。(3) 机器学习与人工智能各种基础问题的统一性观点正在形成。例如学习与问题求解结合进行、知识表达便于学习的观点产生了通用智能系统SOAR的组块学习。类比学习与问题求解结合的基于案例方法已成为经验学习的重要方向。(4) 各种学习方法的应用范围不断扩大,一部分已形成商品。归纳学习的知识获取工具已在诊断分类型专家系统中广泛使用。连接学习在声图文识别中占优势。分析学习已用于设计综合型专家系统。遗传算法与强化学习在工程控制中有较好的应用前景。与符号系统耦合的神经网络连接学习将在企业的智能管理与智能机器人运动规划中发挥作用。(5) 与机器学习有关的学术活动空前活跃。国际上除每年一次的机器学习研讨会外,还有计算机学习理论会议以及遗传算法会议。
收起全文
精华内容
下载资源
问答
  • 机器学习算法
    万次阅读 多人点赞
    2022-03-08 22:55:09

    初学者应该知道的十大机器学习算法

    来源:https://builtin.com/data-science/tour-top-10-algorithms-machine-learning-newbies

    机器学习算法被描述为学习一个目标函数 (f),它最好地将输入变量 (X) 映射到输出变量 (Y):Y = f(X)

    最常见的机器学习类型是学习映射 Y = f(X) 以针对新 X 预测 Y。这称为预测建模或预测分析,目标就是要做出最准确的预测。

    线性回归

    线性回归是统计和机器算法中最容易理解的算法之一。

    线性回归的表示是一个方程,它通过找到称为系数 (B) 的输入变量的特定权重来描述最适合输入变量 (x) 和输出变量 (y) 之间关系的直线。
    在这里插入图片描述
    例如:y = B0 + B1 * x
    我们将在给定输入 x 的情况下预测 y,线性回归学习算法的目标是找到系数 B0 和 B1 的值。

    可以使用不同的技术从数据中学习线性回归模型,例如普通最小二乘的线性代数解决方案和梯度下降优化。

    逻辑回归

    逻辑回归是机器学习从统计学领域借用的另一种技术。它是二进制分类问题(具有两个类值的问题)的首选方法。

    逻辑回归类似于线性回归,其目标是找到加权每个输入变量的系数值与线性回归不同,输出的预测是使用称为逻辑函数的非线性函数转换的。

    逻辑函数看起来像一个大 S,会将任何值转换为 0 到 1 的范围。这很有用,因为我们可以将规则应用于逻辑函数的输出以将值捕捉到 0 和 1(例如,如果小于 0.5 则输出 1) 并预测一个类值。
    逻辑回归:逻辑回归曲线图,显示通过考试的概率与学习时间的关系
    由于模型的学习方式,逻辑回归所做的预测也可以用作给定数据实例属于 0 类或 1 类的概率。这对于需要给出更多理由的问题是很有用一个预测。

    与线性回归一样,当您删除与输出变量无关的属性以及彼此非常相似(相关)的属性时,逻辑回归的效果会更好。这是一个快速学习的模型,并且对二元分类问题有效。

    线性判别分析

    逻辑回归是一种传统上仅限于两类分类问题的分类算法。如果您有两个以上的类别,则线性判别分析算法是首选的线性分类技术。

    LDA 的表示非常简单。它由您的数据的统计属性组成,为每个类计算。对于单个输入变量,这包括:

    1. 每个类别的平均值。
    2. 跨所有类计算的方差。

    在这里插入图片描述
    通过计算每个类别的判别值并针对具有最大值的类别进行预测。假设数据具有高斯分布(钟形曲线),因此最好事先从数据中删除异常值。它是分类预测建模问题的一种简单而强大的方法。

    分类和回归树

    决策树是预测建模机器学习的一种重要算法。

    决策树模型的表示是二叉树。这是来自算法和数据结构的二叉树,没什么花哨的。每个节点代表一个输入变量 (x) 和该变量上的一个分割点(假设变量是数字)。
    在这里插入图片描述
    树的叶节点包含一个输出变量 (y),用于进行预测。通过遍历树的分裂直到到达叶节点并在该叶节点处输出类值来进行预测。

    树的预测速度也很快。它们通常对于广泛的问题也很准确,并且不需要对数据进行任何特殊准备。

    朴素贝叶斯

    朴素贝叶斯是一种简单但功能强大的预测建模算法。

    该模型由两种类型的概率组成,可以直接从您的训练数据中计算出来:
    1)每个类别的概率;
    2)给定每个 x 值的每个类的条件概率。
    计算后,概率模型可用于使用贝叶斯定理对新数据进行预测。当数据是实值时,通常假设高斯分布(钟形曲线),以便可以轻松估计这些概率。
    在这里插入图片描述
    朴素贝叶斯被称为朴素,因为它假设每个输入变量都是独立的。这是一个强有力的假设,对于真实数据来说是不现实的,然而,该技术在处理大量复杂问题时非常有效。

    K-最近邻 (KNN)

    KNN算法非常简单,非常有效。KNN 的模型表示是整个训练数据集。

    通过在整个训练集中搜索 K 个最相似的实例(邻居)并汇总这些 K 个实例的输出变量,对新数据点进行预测。

    对于回归问题,这可能是平均输出变量,对于分类问题,这可能是模式(或最常见的)类值。

    诀窍在于如何确定数据实例之间的相似性。在这里插入图片描述
    KNN 可能需要大量内存或空间来存储所有数据,但仅在需要预测时才及时执行计算(或学习)。这个期间你可以随着时间的推移更新和管理训练实例,以保持预测的准确性。

    学习向量量化 (LVQ)

    K-Nearest Neighbors 的一个缺点是需要保留整个训练数据集。

    学习向量量化算法(或简称 LVQ)是一种人工神经网络算法,它允许选择要挂起的训练实例数量并准确了解这些实例的外观。

    在这里插入图片描述
    LVQ 的表示是码本向量的集合。这些是在开始时随机选择的,并适合在学习算法的多次迭代中最好地总结训练数据集。学习后,码本向量可以像 K-Nearest Neighbors 一样用于进行预测。通过计算每个码本向量与新数据实例之间的距离,找到最相似的邻居(最佳匹配码本向量)。然后返回最佳匹配单元的类值或(回归情况下的实际值)作为预测。
    如果重新调整数据以具有相同的范围,例如在 0 和 1 之间,则可以获得最佳结果。

    如果发现 KNN 在你的数据集上提供了良好的结果,可以尝试使用 LVQ 来减少存储整个训练数据集的内存需求。

    支持向量机 (SVM)

    支持向量机可能是最受欢迎和谈论最多的机器学习算法之一。

    超平面是分割输入变量空间的线。

    在 SVM 中,选择一个超平面来最好地将输入变量空间中的点按它们的类(类 0 或类 1)分开。在二维中,你可以将其可视化为一条线,假设我们所有的输入点都可以被这条线完全隔开。SVM 学习算法通过超平面找到导致类的最佳分离的系数。
    在这里插入图片描述
    超平面和最近数据点之间的距离称为边距。
    可以分离这两个类的最佳或最优超平面是具有最大边距的线。

    只有这些点与定义超平面和构建分类器有关。这些点称为支持向量。它们支持或定义超平面。在实践中,使用优化算法来找到最大化边际的系数值。

    Bagging 和随机森林

    随机森林是最流行和最强大的机器学习算法之一。它是一种集成机器学习算法。称为 Bootstrap Aggregation 或 bagging。

    Bootstrap是一种强大的统计方法,用于从数据样本中估计数量。

    在 bagging 中,使用相同的方法,但用于估计整个统计模型,最常见的是决策树。

    获取训练数据的多个样本,然后为每个数据样本构建模型。当你需要对新数据进行预测时,每个模型都会进行预测,并对预测进行平均以更好地估计真实输出值。

    在这里插入图片描述
    随机森林是对这种方法的一种调整,其中创建了决策树,因此不是选择最佳分割点,而是通过引入随机性来进行次优分割。

    因此,为每个数据样本创建的模型与其他模型相比更加不同,但仍然以其独特和不同的方式准确。结合他们的预测可以更好地估计真实的潜在输出值。

    Boosting 和 AdaBoost

    Boosting 是一种集成技术,它试图从多个弱分类器中创建一个强分类器。

    这是通过从训练数据构建模型,然后创建第二个模型来尝试纠正第一个模型中的错误来完成的。添加模型直到训练集被完美预测或添加最大数量的模型。

    AdaBoost 是为二进制分类开发的第一个真正成功的提升算法。这是理解 boosting 的最佳起点。

    AdaBoost 与短决策树一起使用。
    在创建第一棵树后,树在每个训练实例上的性能用于衡量下一棵创建的树应该对每个训练实例的关注程度。难以预测的训练数据被赋予更高的权重,而易于预测的实例被赋予更少的权重。

    模型一个接一个地按顺序创建,每个模型都会更新训练实例上的权重,这些权重会影响序列中下一棵树执行的学习。

    在构建完所有树之后,将对新数据进行预测,并且每棵树的性能取决于它在训练数据上的准确程度。

    由于算法非常重视纠正错误,因此拥有干净的数据并删除异常值非常重要。

    更多相关内容
  • 本篇文章详解机器学习应用流程,应用在结构化数据和非结构化数据(图像)上,借助案例重温机器学习基础知识,并学习应用机器学习解决问题的基本流程。

    作者:韩信子@ShowMeAI
    教程地址https://www.showmeai.tech/tutorials/41
    本文地址https://www.showmeai.tech/article-detail/201
    声明:版权所有,转载请联系平台与作者并注明出处
    收藏ShowMeAI查看更多精彩内容


    引言

    本篇文章希望带大家完整走一遍机器学习应用流程,我们会讲解到基于Python的机器学习算法,应用在结构化数据和非结构化数据(图像)上,希望通过文章内容帮助大家在案例中重温机器学习基础知识,并学习应用机器学习解决问题的基本流程。

    文章中会用到下述两个库来实现机器学习算法:

    在本篇文章中,我们将讲解到以下内容:

    • 问题抽象与理解
    • 数据准备与处理(预处理、特征提取、特征工程等)
    • 各种机器学习算法
    • 实验结果分析与对比
    • 模型选择与调优

    我们会覆盖到的机器学习算法包括:KNN、朴素贝叶斯、逻辑回归、SVM、决策树、随机森林、感知机、前馈神经网络、卷积神经网络。

    1.环境准备

    工欲善其事必先利其器,我们先安装一下必需的Python库(当然我们也推荐大家用集成环境anaconda,具体的安装与设置可以参考ShowMeAI文章 图解Python | 安装与环境设置 完成):

    可以采用pip安装,命令如下:
    $ pip install numpy
    $ pip install pillow
    $ pip install --upgrade scikit-learn
    $ pip install tensorflow # or tensorflow-gpu
    $ pip install keras
    $ pip install opencv-contrib-python
    $ pip install --upgrade imutils
    

    2.数据集

    因为本篇文章我们介绍结构化数据和非结构化数据的不同建模,我们这里用到两个数据集。

    2.1 iris(鸢尾花)数据集

    第一个数据集是iris(鸢尾花)数据集,它是一个入门级数据集。整个数据集都是数值型的数据,是一个结构化的表格数据,每一行代表一个样本,然后每一列就是不同的属性。

    这个数据集主要是收集了三种不同的鸢尾花的数据,分别为:

    • Iris Setosa
    • Iris Versicolor
    • Iris Virginica

    对应图中最后一列Class label,然后还有四种属性,分别是:

    • Sepal length:萼片长度
    • Sepal width:萼片宽度
    • Petal length:花瓣长度
    • Petal width:花瓣宽度

    对于该数据集,我们的目标就是根据给定的四个属性,训练一个机器学习模型来正确分类每个样本的类别,这是一个典型的分类任务。

    2.2 图像数据集

    第二个数据集是一个图像数据集。它包括海岸线(Coast)、森林(Forest)和高速公路(Highway)三种场景,总共是 948 张图片,我们需要构建模型完成类别的分类,每个类别的具体图片数量如下:

    • 海岸线(Coast):360
    • 森林(Forest):328
    • 高速公路(Highway):260

    3.机器学习应用步骤

    我们在不同场景下应用机器学习算法,都有大致的步骤,比如下面是一个典型的机器学习应用流程:

    当然,并不是其中的每一步都是必须的,我们也可能会调整其中某些步骤中的细节。

    3.1 问题抽象与理解

    针对我们的问题,问一下自己:

    • 数据集是哪种类型?数值型,类别型还是图像?
    • 模型的最终目标是什么?
    • 如何定义和衡量“准确率”呢?
    • 以目前自身的机器学习知识来看,哪些算法在处理这类问题上效果很好?

    前序问题比较简单,最后的问题,随着大家应用机器学习解决问题的经验积累,可以更准确快速地回答。

    3.2 数据准备与处理

    数据准备与处理,包括数据预处理以及特征工程了。一般这一步,包括了加载数据、检查数据、探索性数据分析(EDA)、数据预处理,进而决定需要做的特征提取或者特征工程。

    特征提取是应用某种算法通过某种方式来量化数据的过程。比如,对于图像数据,我们可以采用计算直方图的方法来统计图像中像素强度的分布,通过这种方式,我们就得到描述图像颜色的特征。

    特征工程是将原始输入数据转换成一个更好描述潜在问题的特征表示的过程。大家可以查看ShowMeAI机器学习专题文章 系统了解特征工程的常见方法。

    3.3 多模型应用

    下一步可以选择各种候选机器学习算法,并应用在数据集上。我们安装的工具包内,包含很多机器学习算法,比如下述模型都可以用作分类:

    • 线性模型(逻辑回归、线性SVM)
    • 非线性模型(RBF、SVM、梯度下降分类器)
    • 树和基于集成的模型(决策树、随机森林)
    • 神经网络(多层感知机、卷积神经网络)

    对于模型选择,当然很多需要依据实验效果来定,但我们也有一些先序的经验,比如:

    • 对于稠密型多特征的数据集,随机森林算法的效果很不错;
    • 逻辑回归算法可以很好处理高维度的稀疏数据;
    • 对于图像数据,CNNs的效果非常好。

    下图为 scikit-learn工具库 官方给的一个模型选择思路参考:

    4.构建机器学习流程并实验分析

    我们构建如下的代码文件目录,包含四个代码文件和一个3scenes图像文件夹(内含三场景数据集),iris数据集无需另外存储,直接采用scikit-learn库载入即可。

    ├── 3scenes
    │   ├── coast [360 entries]
    │   ├── forest [328 entries]
    │   └── highway [260 entries]
    ├── iris_classifier.py
    ├── image_classifier.py
    ├── nn_iris.py
    └── basic_cnn.py
    

    4.1 结构化数据建模

    首先实现iris_classifier,我们这里直接使用sklearn的机器学习算法来对iris数据集进行分类。

    # 导入需要的库
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.naive_bayes import GaussianNB
    from sklearn.linear_model import LogisticRegression
    from sklearn.svm import SVC
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.neural_network import MLPClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import classification_report
    from sklearn.datasets import load_iris
    import argparse
    
    # 设置参数
    ap = argparse.ArgumentParser()
    ap.add_argument("-m", "--model", type=str, default="knn", help="type of python machine learning model to use")
    args = vars(ap.parse_args())
    
    # 定义一个保存模型的字典,根据 key 来选择加载哪个模型
    models = {
        "knn": KNeighborsClassifier(n_neighbors=1),
        "naive_bayes": GaussianNB(),
        "logit": LogisticRegression(solver="lbfgs", multi_class="auto"),
        "svm": SVC(kernel="rbf", gamma="auto"),
        "decision_tree": DecisionTreeClassifier(),
        "random_forest": RandomForestClassifier(n_estimators=100),
        "mlp": MLPClassifier()
    }
    

    其中,models从前往后依次包括这些算法:KNN、朴素贝叶斯、逻辑回归、SVM、决策树、随机森林、感知机等。

    我们直接调用sklearn中相应的函数来实现对应的算法即可,这里直接用一个models的字典来保存不同模型的初始化,然后根据参数--model来调用对应的模型,比如命令输入python iris_classifier.py --model knn就是调用knn算法模型。

    接着就是载入数据部分:

    print("加载数据中...")
    dataset = load_iris()
    trainX, testX, trainY, testY = train_test_split(dataset.data, dataset.target, random_state=3, test_size=0.2)
    

    这里直接调用sklearn.datasets中的load_iris()载入数据,然后采用train_test_split来划分训练集和数据集,这里是80%数据作为训练集,20%作为测试集。

    最后就是训练模型和预测部分:

    # 训练模型
    print("应用 '{}' 模型建模...".format(args["model"]))
    model = models[args["model"]]
    model.fit(trainX, trainY)
    
    # 预测并输出一份分类结果报告
    print("评估模型效果...")
    predictions = model.predict(testX)
    print(classification_report(testY, predictions, target_names=dataset.target_names))
    

    4.2 图像数据建模

    类似的过程对三场景图像数据集构建代码image_classifier.py

    # 导入工具库
    from sklearn.preprocessing import LabelEncoder
    from PIL import Image
    from imutils import paths
    import numpy as np
    import os
    

    其中LabelEncoder是为了将标签从字符串编码为整型,然后其余几项都是处理图像相关。

    对于图像数据,如果直接采用原始像素信息输入模型中,大部分的机器学习算法效果都很不理想,所以这里采用特征提取方法,主要是统计图像颜色通道的均值和标准差信息,总共是RGB3个通道,每个通道各计算均值和标准差,然后结合在一起,得到一个六维的特征,函数如下所示:

    def extract_color_stats(image):
        '''
        将图片分成 RGB 三通道,然后分别计算每个通道的均值和标准差,然后返回
        :param image:
        :return:
        '''
        (R, G, B) = image.split()
        features = [np.mean(R), np.mean(G), np.mean(B), np.std(R), np.std(G), np.std(B)]
    
        return features
    

    然后同样会定义一个models字典,代码一样,这里就不贴出来了,然后图像载入部分的代码如下:

    # 加载数据并提取特征
    print("抽取图像特征中...")
    imagePaths = paths.list_images(args['dataset'])
    data = []
    labels = []
    
    # 循环遍历所有的图片数据
    for imagePath in imagePaths:
        # 加载图片,然后计算图片的颜色通道统计信息
        image = Image.open(imagePath)
        features = extract_color_stats(image)
        data.append(features)
    
        # 保存图片的标签信息
        label = imagePath.split(os.path.sep)[-2]
        labels.append(label)
    
    # 对标签进行编码,从字符串变为整数类型
    le = LabelEncoder()
    labels = le.fit_transform(labels)
    
    # 进行训练集和测试集的划分,80%数据作为训练集,其余20%作为测试集
    trainX, testX, trainY, testY = train_test_split(data, labels, test_size=0.2)
    

    上述代码就完成加载图片的路径信息,然后依次遍历,读取图片,提取特征,提取标签信息,保存特征和标签信息,接着编码标签,然后就是划分训练集和测试集。

    接着是相同的训练模型和预测的代码,和前面的分类器一样。完整版代码如下:

    # 导入工具库
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.naive_bayes import GaussianNB
    from sklearn.linear_model import LogisticRegression
    from sklearn.svm import SVC
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.neural_network import MLPClassifier
    from sklearn.preprocessing import LabelEncoder
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import classification_report
    from PIL import Image
    from imutils import paths
    import numpy as np
    import argparse
    import os
    
    # 抽取图像特征
    def extract_color_stats(image):
        '''
        将图片分成 RGB 三通道,然后分别计算每个通道的均值和标准差,然后返回
        :param image:
        :return:
        '''
        (R, G, B) = image.split()
        features = [np.mean(R), np.mean(G), np.mean(B), np.std(R), np.std(G), np.std(B)]
    
        return features
    
    
    # 设置参数
    ap = argparse.ArgumentParser()
    ap.add_argument("-d", "--dataset", type=str, default="3scenes",
                    help="path to directory containing the '3scenes' dataset")
    ap.add_argument("-m", "--model", type=str, default="knn",
                    help="type of python machine learning model to use")
    args = vars(ap.parse_args())
    
    # 定义一个保存模型的字典,根据 key 来选择加载哪个模型
    models = {
        "knn": KNeighborsClassifier(n_neighbors=1),
        "naive_bayes": GaussianNB(),
        "logit": LogisticRegression(solver="lbfgs", multi_class="auto"),
        "svm": SVC(kernel="rbf", gamma="auto"),
        "decision_tree": DecisionTreeClassifier(),
        "random_forest": RandomForestClassifier(n_estimators=100),
        "mlp": MLPClassifier()
    }
    
    # 加载数据并提取特征
    print("抽取图像特征中...")
    imagePaths = paths.list_images(args['dataset'])
    data = []
    labels = []
    
    # 循环遍历所有的图片数据
    for imagePath in imagePaths:
        # 加载图片,然后计算图片的颜色通道统计信息
        image = Image.open(imagePath)
        features = extract_color_stats(image)
        data.append(features)
    
        # 保存图片的标签信息
        label = imagePath.split(os.path.sep)[-2]
        labels.append(label)
    
    # 对标签进行编码,从字符串变为整数类型
    le = LabelEncoder()
    labels = le.fit_transform(labels)
    
    # 进行训练集和测试集的划分,80%数据作为训练集,其余20%作为测试集
    trainX, testX, trainY, testY = train_test_split(data, labels, random_state=3, test_size=0.2)
    # print('trainX numbers={}, testX numbers={}'.format(len(trainX), len(testX)))
    
    # 训练模型
    print("[应用 '{}' 模型建模".format(args["model"]))
    model = models[args["model"]]
    model.fit(trainX, trainY)
    
    # 预测并输出分类结果报告
    print("模型评估")
    predictions = model.predict(testX)
    print(classification_report(testY, predictions, target_names=le.classes_))
    

    完成这两份代码后,我们就可以开始运行下代码,对比不同算法在两个数据集上的性能。

    4.3 不同模型建模对比

    (1) KNN

    K-Nearest Neighbors分类器最简单的分类算法之一。该算法依赖于特征向量之间的距离。简单地说,KNN算法通过在k个最接近的样本中最多的类别来对未知数据点进行分类。关于KNN的详细讲解可以阅读ShowMeAI的文章 图解机器学习 | KNN算法及其应用

    这里我们先运行下image_classifier.py,调用默认的模型knn,看下KNNiris数据集上的实验结果,如下所示:

    $ !python iris_classifier.py --model knn
    加载数据中...
    应用 'knn' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        10
      versicolor       0.90      0.90      0.90        10
       virginica       0.90      0.90      0.90        10
    
        accuracy                           0.93        30
       macro avg       0.93      0.93      0.93        30
    weighted avg       0.93      0.93      0.93        30
    

    其中主要是给出了对每个类别的精确率、召回率、F1以及该类别测试集数量,即分别对应precision、recall、f1-score、support。根据最后一行第一列,可以看到KNN取得93%的准确率。

    接着是在三场景图片数据集上的实验结果:

    $ !python image_classifier.py --model knn
    抽取图像特征中...
    应用 'knn' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
           coast       0.84      0.68      0.75       105
          forest       0.78      0.77      0.77        78
         highway       0.56      0.78      0.65        54
    
       micro avg       0.73      0.73      0.73       237
       macro avg       0.72      0.74      0.72       237
    weighted avg       0.75      0.73      0.73       237
    

    这里KNN取得75%的准确率。

    ps:实际上,运行这个算法,不同次数会有不同的结果,其主要原因是因为在划分训练集和测试集的时候,代码没有设置参数random_state,这导致每次运行划分的训练集和测试集的图片都是不同的,所以运行结果也会不相同!

    (2) 朴素贝叶斯

    接着是朴素贝叶斯算法,关于朴素贝叶斯算法的详细讲解可以阅读ShowMeAI的文章 图解机器学习 | 朴素贝叶斯算法详解

    分别测试两个数据集,结果如下:

    $ !python iris_classifier.py --model naive_bayes
    加载数据中...
    应用 'naive_bayes' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        15
      versicolor       1.00      0.92      0.96        12
       virginica       0.92      1.00      0.96        11
    
       micro avg       0.97      0.97      0.97        38
       macro avg       0.97      0.97      0.97        38
    weighted avg       0.98      0.97      0.97        38
    
    $ !python image_classifier.py --model naive_bayes
    抽取图像特征中...
    应用 'naive_bayes' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
           coast       0.69      0.40      0.50        88
          forest       0.68      0.82      0.74        84
         highway       0.61      0.78      0.68        65
    
       micro avg       0.65      0.65      0.65       237
       macro avg       0.66      0.67      0.64       237
    weighted avg       0.66      0.65      0.64       237
    

    同样,朴素贝叶斯在iris上有98%的准确率,但是在图像数据集上仅有66%的准确率。

    那么,我们是否可以说明KNN算法比朴素贝叶斯好呢?当然是不可以的,上述结果只能说明在三场景图像数据集上,KNN算法优于朴素贝叶斯算法。
    实际上,每种算法都有各自的优缺点和适用场景,不能一概而论地说某种算法任何时候都优于另一种算法,这需要具体问题具体分析。

    (3) 逻辑回归

    接着是逻辑回归算法,关于逻辑回归算法的详细讲解可以阅读ShowMeAI的文章 图解机器学习 | 逻辑回归算法详解

    分别测试两个数据集,结果如下:

    $ !python iris_classifier.py --model logit
    加载数据中...
    应用 'logit' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        15
      versicolor       1.00      0.92      0.96        12
       virginica       0.92      1.00      0.96        11
    
       micro avg       0.97      0.97      0.97        38
       macro avg       0.97      0.97      0.97        38
    weighted avg       0.98      0.97      0.97        38
    
    $ !python image_classifier.py --model logit
    抽取图像特征中...
    应用 'logit' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
           coast       0.67      0.67      0.67        92
          forest       0.79      0.82      0.80        82
         highway       0.61      0.57      0.59        63
    
       micro avg       0.70      0.70      0.70       237
       macro avg       0.69      0.69      0.69       237
    weighted avg       0.69      0.70      0.69       237
    

    同样,逻辑回归在 iris 上有 98% 的准确率,但是在图像数据集上仅有 69% 的准确率

    (4) 支持向量机 SVM

    接着是SVM算法,关于SVM算法的详细讲解可以阅读ShowMeAI的文章 图解机器学习 | 支持向量机模型详解

    分别测试两个数据集,结果如下:

    $ !python iris_classifier.py --model svm
    加载数据中...
    应用 'svm' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        15
      versicolor       1.00      0.92      0.96        12
       virginica       0.92      1.00      0.96        11
    
       micro avg       0.97      0.97      0.97        38
       macro avg       0.97      0.97      0.97        38
    weighted avg       0.98      0.97      0.97        38
    
    $ !python image_classifier.py --model svm
    抽取图像特征中...
    应用 'svm' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
           coast       0.84      0.76      0.80        92
          forest       0.86      0.93      0.89        84
         highway       0.78      0.80      0.79        61
    
       micro avg       0.83      0.83      0.83       237
       macro avg       0.83      0.83      0.83       237
    

    同样,SVM在iris上有98%的准确率,但是在图像数据集上仅有83%的准确率。

    (5) 决策树

    接着是决策树算法,关于决策树算法的详细讲解可以阅读ShowMeAI的文章 图解机器学习 | 决策树模型详解

    分别测试两个数据集,结果如下:

    $ !python iris_classifier.py --model decision_tree
    加载数据中...
    应用 'decision_tree' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        15
      versicolor       0.92      0.92      0.92        12
       virginica       0.91      0.91      0.91        11
    
       micro avg       0.95      0.95      0.95        38
       macro avg       0.94      0.94      0.94        38
    weighted avg       0.95      0.95      0.95        38
    
    $ !python image_classifier.py --model decision_tree
    抽取图像特征中...
    应用 'decision_tree' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
           coast       0.71      0.74      0.72        85
          forest       0.76      0.80      0.78        83
         highway       0.77      0.68      0.72        69
    
       micro avg       0.74      0.74      0.74       237
       macro avg       0.75      0.74      0.74       237
    weighted avg       0.74      0.74      0.74       237
    

    同样,决策树在iris上有98%的准确率,但是在图像数据集上仅有74%的准确率。

    (6) 随机森林

    接着是随机森林算法,关于随机森林算法的详细讲解可以阅读ShowMeAI的文章 图解机器学习 | 随机森林分类模型详解

    分别测试两个数据集,结果如下:

    $ !python iris_classifier.py --model random_forest
    加载数据中...
    应用 'random_forest' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        15
      versicolor       1.00      0.83      0.91        12
       virginica       0.85      1.00      0.92        11
    
       micro avg       0.95      0.95      0.95        38
       macro avg       0.95      0.94      0.94        38
    weighted avg       0.96      0.95      0.95        38
    
    $ !python image_classifier.py --model random_forest
    加载数据中...
    应用 'random_forest' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
           coast       0.80      0.83      0.81        84
          forest       0.92      0.84      0.88        90
         highway       0.77      0.81      0.79        63
    
       micro avg       0.83      0.83      0.83       237
       macro avg       0.83      0.83      0.83       237
    weighted avg       0.84      0.83      0.83       237
    

    同样,随机森林在iris上有96%的准确率,但是在图像数据集上仅有84%的准确率。

    注意了,一般如果决策树算法的效果还不错的话,随机森林算法应该也会取得不错甚至更好的结果,这是因为随机森林实际上就是多棵决策树通过集成学习方法组合在一起进行分类预测。

    (7) 多层感知机

    最后是多层感知机算法,分别测试两个数据集,结果如下:

    $ !python iris_classifier.py --model mlp
    加载数据中...
    应用 'mlp' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
          setosa       1.00      1.00      1.00        15
      versicolor       1.00      0.92      0.96        12
       virginica       0.92      1.00      0.96        11
    
       micro avg       0.97      0.97      0.97        38
       macro avg       0.97      0.97      0.97        38
    weighted avg       0.98      0.97      0.97        38
    
    $ !python image_classifier.py --model mlp
    抽取图像特征中...
    应用 'mlp' 模型建模...
    评估模型效果...
                  precision    recall  f1-score   support
    
           coast       0.72      0.91      0.80        86
          forest       0.92      0.89      0.90        79
         highway       0.79      0.58      0.67        72
    
       micro avg       0.80      0.80      0.80       237
       macro avg       0.81      0.79      0.79       237
    weighted avg       0.81      0.80      0.80       237
    

    同样,多层感知机在 iris 上有 98% 的准确率,但是在图像数据集上仅有 81% 的准确率.

    (8) 神经网络

    最后是实现深度学习的算法,也就是nn_iris.pybasic_cnn.py这两份代码。

    首先是nn_iris.py的实现,同样首先是导入库和数据的处理:

    # 导入工具库
    from keras.models import Sequential
    from keras.layers.core import Dense
    from keras.optimizers import SGD
    from sklearn.preprocessing import LabelBinarizer
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import classification_report
    from sklearn.datasets import load_iris
    
    # 载入 Iris 数据集,然后进行训练集和测试集的划分,80%数据作为训练集,其余20%作为测试集
    print("加载数据中...")
    dataset = load_iris()
    (trainX, testX, trainY, testY) = train_test_split(dataset.data,
                                                      dataset.target, test_size=0.2)
    
    # 将标签进行独热向量编码
    lb = LabelBinarizer()
    trainY = lb.fit_transform(trainY)
    testY = lb.transform(testY)
    

    我们采用Keras来实现神经网络,然后这里需要将标签进行one-hot编码,即独热向量编码。

    接着就是搭建网络模型的结构和训练、预测代码:

    # 利用 Keras 定义网络模型
    model = Sequential()
    model.add(Dense(3, input_shape=(4,), activation="sigmoid"))
    model.add(Dense(3, activation="sigmoid"))
    model.add(Dense(3, activation="softmax"))
    
    # 采用梯度下降训练模型
    print('训练网络中...')
    opt = SGD(lr=0.1, momentum=0.9, decay=0.1 / 250)
    model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=["accuracy"])
    H = model.fit(trainX, trainY, validation_data=(testX, testY), epochs=250, batch_size=16)
    
    # 预测
    print('评估模型效果')
    predictions = model.predict(testX, batch_size=16)
    print(classification_report(testY.argmax(axis=1), predictions.argmax(axis=1), target_names=dataset.target_names))
    

    上述代码构建了3层全连接层的神经网络,前两层采用Sigmoid激活函数,然后最后一层是输出层,所以采用softmax将输出变成概率值。优化算法选择的随机梯度下降SGD,损失函数是categorical_crossentropy,迭代次数是250次,每一批次的数据量batch_size是16。

    完整版代码如下:

    # 加载工具库
    from keras.models import Sequential
    from keras.layers.core import Dense
    from keras.optimizers import SGD
    from sklearn.preprocessing import LabelBinarizer
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import classification_report
    from sklearn.datasets import load_iris
    
    # 载入 Iris 数据集,然后进行训练集和测试集的划分,80%数据作为训练集,其余20%作为测试集
    print("加载数据中...")
    dataset = load_iris()
    (trainX, testX, trainY, testY) = train_test_split(dataset.data,
                                                      dataset.target, test_size=0.2)
    
    # 将标签进行独热向量编码
    lb = LabelBinarizer()
    trainY = lb.fit_transform(trainY)
    testY = lb.transform(testY)
    
    # 利用 Keras 定义网络模型
    model = Sequential()
    model.add(Dense(3, input_shape=(4,), activation="sigmoid"))
    model.add(Dense(3, activation="sigmoid"))
    model.add(Dense(3, activation="softmax"))
    
    # 采用梯度下降训练模型
    print('训练网络中...')
    opt = SGD(lr=0.1, momentum=0.9, decay=0.1 / 250)
    model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=["accuracy"])
    H = model.fit(trainX, trainY, validation_data=(testX, testY), epochs=250, batch_size=16)
    
    # 预测
    print('评估模型效果...')
    predictions = model.predict(testX, batch_size=16)
    print(classification_report(testY.argmax(axis=1), predictions.argmax(axis=1), target_names=dataset.target_names))
    

    直接运行命令python nn_iris.py,输出的结果如下:

    $ python nn_iris.py 
    Using TensorFlow backend.
    加载数据中...
    训练网络中...
    Train on 112 samples, validate on 38 samples
    Epoch 1/250
    2022-02-08 10:28:19.104933: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 AVX512F FMA
    112/112 [==============================] - 0s 2ms/step - loss: 1.1454 - acc: 0.3214 - val_loss: 1.1867 - val_acc: 0.2368
    Epoch 2/250
    112/112 [==============================] - 0s 48us/step - loss: 1.0828 - acc: 0.3929 - val_loss: 1.2132 - val_acc: 0.5000
    Epoch 3/250
    112/112 [==============================] - 0s 47us/step - loss: 1.0491 - acc: 0.5268 - val_loss: 1.0593 - val_acc: 0.4737
    ...
    Epoch 248/250
    112/112 [==============================] - 0s 46us/step - loss: 0.1319 - acc: 0.9554 - val_loss: 0.0407 - val_acc: 1.0000
    Epoch 249/250
    112/112 [==============================] - 0s 46us/step - loss: 0.1024 - acc: 0.9643 - val_loss: 0.1595 - val_acc: 0.8947
    Epoch 250/250
    112/112 [==============================] - 0s 47us/step - loss: 0.0795 - acc: 0.9821 - val_loss: 0.0335 - val_acc: 1.0000
    评估模型效果...
                 precision    recall  f1-score   support
    
         setosa       1.00      1.00      1.00         9
     versicolor       1.00      1.00      1.00        10
      virginica       1.00      1.00      1.00        19
    
    avg / total       1.00      1.00      1.00        38
    

    这里得到的是100%的准确率。

    (9) CNN

    最后我们要应用卷积神经网络,我们实现一下basic_cnn.py代码。

    同样首先是导入必须的库函数:

    # 导入工具库
    from keras.models import Sequential
    from keras.layers.convolutional import Conv2D
    from keras.layers.convolutional import MaxPooling2D
    from keras.layers.core import Activation
    from keras.layers.core import Flatten
    from keras.layers.core import Dense
    from keras.optimizers import Adam
    from sklearn.preprocessing import LabelBinarizer
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import classification_report
    from PIL import Image
    from imutils import paths
    import numpy as np
    import argparse
    import os
    
    # 配置参数
    ap = argparse.ArgumentParser()
    ap.add_argument("-d", "--dataset", type=str, default="3scenes",
                    help="path to directory containing the '3scenes' dataset")
    args = vars(ap.parse_args())
    
    

    同样是要导入Keras来建立CNN的网络模型,另外因为是处理图像数据,所以PILimutils也是要导入的。

    然后是加载数据和划分训练集和测试集,对于加载数据,这里直接采用原始图像像素数据,只需要对图像数据做统一尺寸的调整,这里是统一调整为32×32,并做归一化到[0,1]的范围。

    # 加载数据并提取特征
    print("抽取图像特征中...")
    imagePaths = paths.list_images(args['dataset'])
    data = []
    labels = []
    
    # 循环遍历所有的图片数据
    for imagePath in imagePaths:
        # 加载图片,然后调整成 32×32 大小,并做归一化到 [0,1]
        image = Image.open(imagePath)
        image = np.array(image.resize((32, 32))) / 255.0
        data.append(image)
    
        # 保存图片的标签信息
        label = imagePath.split(os.path.sep)[-2]
        labels.append(label)
    
    # 对标签编码,从字符串变为整型
    lb = LabelBinarizer()
    labels = lb.fit_transform(labels)
    
    # 划分训练集和测试集
    (trainX, testX, trainY, testY) = train_test_split(np.array(data), np.array(labels), test_size=0.25)
    

    接着定义了一个4层的CNN网络结构,包含3层卷积层和最后一层输出层,优化算法采用的是Adam而不是SGD。代码如下所示:

    # 定义 CNN 网络模型结构
    model = Sequential()
    model.add(Conv2D(8, (3, 3), padding="same", input_shape=(32, 32, 3)))
    model.add(Activation("relu"))
    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
    model.add(Conv2D(16, (3, 3), padding="same"))
    model.add(Activation("relu"))
    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
    model.add(Conv2D(32, (3, 3), padding="same"))
    model.add(Activation("relu"))
    model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
    model.add(Flatten())
    model.add(Dense(3))
    model.add(Activation("softmax"))
    
    # 训练模型
    print("训练网络中...")
    opt = Adam(lr=1e-3, decay=1e-3 / 50)
    model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"])
    H = model.fit(trainX, trainY, validation_data=(testX, testY),
                  epochs=50, batch_size=32)
    
    # 预测
    print("评估模型效果...")
    predictions = model.predict(testX, batch_size=32)
    print(classification_report(testY.argmax(axis=1),
                                predictions.argmax(axis=1), target_names=lb.classes_))
    

    运行命令python basic_cnn.py,输出结果如下:

    $ python basic_cnn.py 
    Using TensorFlow backend.
    加载图像数据...
    训练网络中...
    Train on 711 samples, validate on 237 samples
    Epoch 1/50
    711/711 [==============================] - 0s 629us/step - loss: 1.0647 - acc: 0.4726 - val_loss: 0.9920 - val_acc: 0.5359
    Epoch 2/50
    711/711 [==============================] - 0s 313us/step - loss: 0.9200 - acc: 0.6188 - val_loss: 0.7778 - val_acc: 0.6624
    Epoch 3/50
    711/711 [==============================] - 0s 308us/step - loss: 0.6775 - acc: 0.7229 - val_loss: 0.5310 - val_acc: 0.7553
    ...
    Epoch 48/50
    711/711 [==============================] - 0s 307us/step - loss: 0.0627 - acc: 0.9887 - val_loss: 0.2426 - val_acc: 0.9283
    Epoch 49/50
    711/711 [==============================] - 0s 310us/step - loss: 0.0608 - acc: 0.9873 - val_loss: 0.2236 - val_acc: 0.9325
    Epoch 50/50
    711/711 [==============================] - 0s 307us/step - loss: 0.0587 - acc: 0.9887 - val_loss: 0.2525 - val_acc: 0.9114
    评估模型效果...
                 precision    recall  f1-score   support
    
          coast       0.85      0.96      0.90        85
         forest       0.99      0.94      0.97        88
        highway       0.91      0.80      0.85        64
    
    avg / total       0.92      0.91      0.91       237
    

    CNN的准确率是达到92%,它是优于之前的几种机器学习算法的结果。

    5.小结

    这篇简单的机器学习教程文章中,我们调用现有的库来应用对应的机器学习算法,解决了2个简单的场景问题。通过这份简单的入门教程,希望大家了解到:

    (1) 没有任何一种算法是完美的,可以完全适用所有的场景,即便是目前很热门的深度学习方法,也存在它的局限性,所以应该具体问题具体分析!

    (2) 经典的5步机器学习操作流程:

    • 问题抽象与理解
    • 数据准备与处理(预处理、特征提取、特征工程等)
    • 各种机器学习算法
    • 实验结果分析与对比
    • 模型选择与调优

    参考资料

    ShowMeAI系列教程推荐

    相关文章推荐

    展开全文
  • 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的...

    目录

    机器学习

    机器学习的步骤

    01  线性回归

    02 逻辑回归

    03 线性判别分析

    04 分类和回归树

    05 朴素贝叶斯

    06 K近邻

    07 学习矢量量化

    08 支持向量机

    09 bagging和随机森林

    10 Boosting和AdaBoost

     每文一语


    机器学习

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论凸分析算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的基础,更是我们现在社会进步的源泉。

    随着社会的进步和发展,我们在科技领域不断的创新,当人类的第一台计算机诞生之后,技术的迭代就已经被装上了风火轮了。我们希望计算机可以帮助我们计算我们人类无法涉及到的领域,但是野心永远是人类进化的动力,我们还希望我们的机器可以帮助我们解决我们的工作,那么机器学习就应运而生了。

     

    人工智能是追求目标,机器学习是实现手段,深度学习是其中一种方法

    机器学习的步骤

    作为一个初学者,机器学习需要掌握怎样的技术呢?首先必须要有一门熟练的编程语言

    Python,Java,R语言.....其实Python主要在一些大数据集模型背后占有强大的优势,而R语言在科研统计比较的吃香,因为R语言拥有很多个第三方程序包,利用少量简洁的代码就可以解决我们的科研工作。

    1. 选择一个合适的模型,这通常需要依据实际问题而定,针对不同的问题和任务需要选取恰当的模型,模型就是一组函数的集合。
    2、判断一个函数的好坏,这需要确定一个衡量标准,也就是我们通常说的损失函数(Loss Function),损失函数的确定也需要依据具体问题而定,如回归问题一般采用欧式距离,分类问题一般采用交叉熵代价函数。
    3、找出“最好”的函数,如何从众多函数中最快的找出“最好”的那一个,这一步是最大的难点,做到又快又准往往不是一件容易的事情。常用的方法有梯度下降算法,最小二乘法等和其他一些技巧(tricks)。

    这就是为什么我们说机器学习,底层基础是数学理论,其他的应该在编程上面下功夫

    差不多认识了我们机器学习,接下来我们就开始从机器学习最常见的10大算法入门,介绍它们的概念知识,最后我们将开启机器学习的大门,详细记录我们学习过程中的点点滴滴!

     

    在机器学习领域,有种说法叫做“世上没有免费的午餐”,简而言之,它是指没有任何一种算法能在每个问题上都能有最好的效果,这个理论在监督学习方面体现得尤为重要。

    举个例子来说,你不能说神经网络永远比决策树好,反之亦然。模型运行被许多因素左右,例如数据集的大小和结构。

    因此,你应该根据你的问题尝试许多不同的算法,同时使用数据测试集来评估性能并选出最优项。

    当然,你尝试的算法必须和你的问题相切合,其中的门道便是机器学习的主要任务。打个比方,如果你想打扫房子,你可能会用到吸尘器、扫帚或者拖把,但你肯定不会拿把铲子开始挖坑吧。这个道理很多人都懂,哈哈哈。

    01  线性回归

    线性回归可能是统计学和机器学习中最知名和最易理解的算法之一。

    由于预测建模主要关注最小化模型的误差,或者以可解释性为代价来做出最准确的预测。 我们会从许多不同领域借用、重用和盗用算法,其中涉及一些统计学知识。

    线性回归用一个等式表示,通过找到输入变量的特定权重(B),来描述输入变量(x)与输出变量(y)之间的线性关系。

    图片

    Linear Regression

    举例:y = B0 + B1 * x

    给定输入x,我们将预测y,线性回归学习算法的目标是找到系数B0和B1的值。

    可以使用不同的技术从数据中学习线性回归模型,例如用于普通最小二乘和梯度下降优化的线性代数解。

    线性回归已经存在了200多年,并且已经进行了广泛的研究。 如果可能的话,使用这种技术时的一些经验法则是去除非常相似(相关)的变量并从数据中移除噪声。 这是一种快速简单的技术和良好的第一种算法。

    02 逻辑回归

    逻辑回归是机器学习从统计领域借鉴的另一种技术。 这是二分类问题的专用方法(两个类值的问题)。

    逻辑回归与线性回归类似,这是因为两者的目标都是找出每个输入变量的权重值。 与线性回归不同的是,输出的预测值得使用称为逻辑函数的非线性函数进行变换。

    逻辑函数看起来像一个大S,并能将任何值转换为0到1的范围内。这很有用,因为我们可以将相应规则应用于逻辑函数的输出上,把值分类为0和1(例如,如果IF小于0.5,那么 输出1)并预测类别值。

    图片

    Logistic Regression

    由于模型的特有学习方式,通过逻辑回归所做的预测也可以用于计算属于类0或类1的概率。这对于需要给出许多基本原理的问题十分有用。

    与线性回归一样,当你移除与输出变量无关的属性以及彼此非常相似(相关)的属性时,逻辑回归确实会更好。 这是一个快速学习和有效处理二元分类问题的模型。

    03 线性判别分析

    传统的逻辑回归仅限于二分类问题。 如果你有两个以上的类,那么线性判别分析算法(Linear Discriminant Analysis,简称LDA)是首选的线性分类技术。

    LDA的表示非常简单。 它由你的数据的统计属性组成,根据每个类别进行计算。 对于单个输入变量,这包括:

    • 每类的平均值。

    • 跨所有类别计算的方差。

    图片

    Linear Discriminant Analysis

    LDA通过计算每个类的判别值并对具有最大值的类进行预测来进行。该技术假定数据具有高斯分布(钟形曲线),因此最好先手动从数据中移除异常值。这是分类预测建模问题中的一种简单而强大的方法。

    04 分类和回归树

    决策树是机器学习的一种重要算法。

    决策树模型可用二叉树表示。对,就是来自算法和数据结构的二叉树,没什么特别。 每个节点代表单个输入变量(x)和该变量上的左右孩子(假定变量是数字)。

    图片

    Decision Tree

    树的叶节点包含用于进行预测的输出变量(y)。 预测是通过遍历树进行的,当达到某一叶节点时停止,并输出该叶节点的类值。

    决策树学习速度快,预测速度快。 对于许多问题也经常预测准确,并且你不需要为数据做任何特殊准备。

    05 朴素贝叶斯

    朴素贝叶斯是一种简单但极为强大的预测建模算法。

    该模型由两种类型的概率组成,可以直接从你的训练数据中计算出来:1)每个类别的概率; 2)给定的每个x值的类别的条件概率。 一旦计算出来,概率模型就可以用于使用贝叶斯定理对新数据进行预测。 当你的数据是数值时,通常假设高斯分布(钟形曲线),以便可以轻松估计这些概率。

    图片

    Bayes Theorem

    朴素贝叶斯被称为朴素的原因,在于它假设每个输入变量是独立的。 这是一个强硬的假设,对于真实数据来说是不切实际的,但该技术对于大范围内的复杂问题仍非常有效。

    06 K近邻

    KNN算法非常简单而且非常有效。KNN的模型用整个训练数据集表示。 是不是特简单?

    通过搜索整个训练集内K个最相似的实例(邻居),并对这些K个实例的输出变量进行汇总,来预测新的数据点。 对于回归问题,新的点可能是平均输出变量,对于分类问题,新的点可能是众数类别值。

    成功的诀窍在于如何确定数据实例之间的相似性。如果你的属性都是相同的比例,最简单的方法就是使用欧几里德距离,它可以根据每个输入变量之间的差直接计算。

    图片

    K-Nearest Neighbors

    KNN可能需要大量的内存或空间来存储所有的数据,但只有在需要预测时才会执行计算(或学习)。 你还可以随时更新和管理你的训练集,以保持预测的准确性。

    距离或紧密度的概念可能会在高维环境(大量输入变量)下崩溃,这会对算法造成负面影响。这类事件被称为维度诅咒。它也暗示了你应该只使用那些与预测输出变量最相关的输入变量。

    07 学习矢量量化

    K-近邻的缺点是你需要维持整个训练数据集。 学习矢量量化算法(或简称LVQ)是一种人工神经网络算法,允许你挂起任意个训练实例并准确学习他们。

    图片

    Learning Vector Quantization

    LVQ用codebook向量的集合表示。开始时随机选择向量,然后多次迭代,适应训练数据集。 在学习之后,codebook向量可以像K-近邻那样用来预测。 通过计算每个codebook向量与新数据实例之间的距离来找到最相似的邻居(最佳匹配),然后返回最佳匹配单元的类别值或在回归情况下的实际值作为预测。 如果你把数据限制在相同范围(如0到1之间),则可以获得最佳结果。

    如果你发现KNN在您的数据集上给出了很好的结果,请尝试使用LVQ来减少存储整个训练数据集的内存要求。

    08 支持向量机

    支持向量机也许是最受欢迎和讨论的机器学习算法之一。

    超平面是分割输入变量空间的线。 在SVM中,会选出一个超平面以将输入变量空间中的点按其类别(0类或1类)进行分离。在二维空间中可以将其视为一条线,所有的输入点都可以被这条线完全分开。SVM学习算法就是要找到能让超平面对类别有最佳分离的系数。

    图片

    Support Vector Machine

    超平面和最近的数据点之间的距离被称为边界,有最大边界的超平面是最佳之选。同时,只有这些离得近的数据点才和超平面的定义和分类器的构造有关,这些点被称为支持向量,他们支持或定义超平面。在具体实践中,我们会用到优化算法来找到能最大化边界的系数值。

    SVM可能是最强大的即用分类器之一,在你的数据集上值得一试。

    09 bagging和随机森林

    随机森林是最流行和最强大的机器学习算法之一。 它是一种被称为Bootstrap Aggregation或Bagging的集成机器学习算法。

    bootstrap是一种强大的统计方法,用于从数据样本中估计某一数量,例如平均值。 它会抽取大量样本数据,计算平均值,然后平均所有平均值,以便更准确地估算真实平均值。

    在bagging中用到了相同的方法,但最常用到的是决策树,而不是估计整个统计模型。它会训练数据进行多重抽样,然后为每个数据样本构建模型。当你需要对新数据进行预测时,每个模型都会进行预测,并对预测结果进行平均,以更好地估计真实的输出值。

    图片

    Random Forest

    随机森林是对决策树的一种调整,相对于选择最佳分割点,随机森林通过引入随机性来实现次优分割。

    因此,为每个数据样本创建的模型之间的差异性会更大,但就自身意义来说依然准确无误。结合预测结果可以更好地估计正确的潜在输出值。

    如果你使用高方差算法(如决策树)获得良好结果,那么加上这个算法后效果会更好。

    10 Boosting和AdaBoost

    Boosting是一种从一些弱分类器中创建一个强分类器的集成技术。 它先由训练数据构建一个模型,然后创建第二个模型来尝试纠正第一个模型的错误。 不断添加模型,直到训练集完美预测或已经添加到数量上限。

    AdaBoost是为二分类开发的第一个真正成功的Boosting算法,同时也是理解Boosting的最佳起点。 目前基于AdaBoost而构建的算法中最著名的就是随机梯度boosting。

    图片

    AdaBoost

    AdaBoost常与短决策树一起使用。 在创建第一棵树之后,每个训练实例在树上的性能都决定了下一棵树需要在这个训练实例上投入多少关注。难以预测的训练数据会被赋予更多的权重,而易于预测的实例被赋予更少的权重。 模型按顺序依次创建,每个模型的更新都会影响序列中下一棵树的学习效果。在建完所有树之后,算法对新数据进行预测,并且通过训练数据的准确程度来加权每棵树的性能。

    • 数据的大小,质量和性质; 

    • 可用的计算时间; 

    • 任务的紧迫性; 

    • 你想要对数据做什么。

    是我们选择那种机器学习算法的关键

    scikit-learn作为一个丰富的python机器学习库,实现了绝大多数机器学习的算法,有相当多的人在使用,于是我这里很无耻地把machine learning cheat sheet for sklearn搬过来了,原文可以看这里。哈哈,既然讲机器学习,我们就用机器学习的语言来解释一下,这是针对实际应用场景的各种条件限制,对scikit-learn里完成的算法构建的一颗决策树,每一组条件都是对应一条路径,能找到相对较为合适的一些解决方法,具体如下:

     每文一语

    既然选择,就像当时一样,不问未来

    展开全文
  • 本文覆盖机器学习常见知识要点,包括机器学习流程、算法分类(监督学习、无监督学习、强化学习)、依托的问题场景(分类、回归、聚类、降维)、机器学习模型评估与选择等。

    ShowMeAI研究中心


    1. 机器学习概述

    1)什么是机器学习

    人工智能(Artificial intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。它是一个笼统而宽泛的概念,人工智能的最终目标是使计算机能够模拟人的思维方式和行为。大概在上世纪50年代开始兴起,但是受限于数据和硬件设备等限制,当时发展缓慢。

    机器学习(Machine learning)是人工智能的子集,是实现人工智能的一种途径,但并不是唯一的途径。它是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的学科。大概在上世纪80年代开始蓬勃发展,诞生了一大批数学统计相关的机器学习模型。

    深度学习(Deep learning)是机器学习的子集,灵感来自人脑,由人工神经网络(ANN)组成,它模仿人脑中存在的相似结构。在深度学习中,学习是通过相互关联的「神经元」的一个深层的、多层的「网络」来进行的。「深度」一词通常指的是神经网络中隐藏层的数量。大概在2012年以后爆炸式增长,广泛应用在很多的场景中。

    让我们看看国外知名学者对机器学习的定义:

    机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构,使之不断改善自身。从实践的意义上来说,机器学习是在大数据的支撑下,通过各种算法让机器对数据进行深层次的统计分析以进行「自学」,使得人工智能系统获得了归纳推理和决策能力

    通过经典的「垃圾邮件过滤」应用,我们再来理解下机器学习的原理,以及定义中的T、E、P分别指代什么。

    2)机器学习三要素

    机器学习三要素包括数据模型算法。这三要素之间的关系,可以用下面这幅图来表示:

    (1)数据

    数据驱动:数据驱动指的是我们基于客观的量化数据,通过主动数据的采集分析以支持决策。与之相对的是经验驱动,比如我们常说的「拍脑袋」。

    (2)模型&算法

    模型:在AI数据驱动的范畴内,模型指的是基于数据X做决策Y的假设函数,可以有不同的形态,计算型和规则型等。

    算法:指学习模型的具体计算方法。统计学习基于训练数据集,根据学习策略,从假设空间中选择最优模型,最后需要考虑用什么样的计算方法求解最优模型。通常是一个最优化的问题。

    3)机器学习发展历程

    人工智能一词最早出现于1956年,用于探索一些问题的有效解决方案。1960年,美国国防部借助「神经网络」这一概念,训练计算机模仿人类的推理过程。

    2010年之前,谷歌、微软等科技巨头改进了机器学习算法,将查询的准确度提升到了新的高度。而后,随着数据量的增加、先进的算法、计算和存储容量的提高,机器学习得到了更进一步的发展。

    4)机器学习核心技术

    • 分类:应用以分类数据进行模型训练,根据模型对新样本进行精准分类与预测。

    • 聚类:从海量数据中识别数据的相似性与差异性,并按照最大共同点聚合为多个类别。

    • 异常检测:对数据点的分布规律进行分析,识别与正常数据及差异较大的离群点。

    • 回归:根据对已知属性值数据的训练,为模型寻找最佳拟合参数,基于模型预测新样本的输出值。

    5)机器学习基本流程

    机器学习工作流(WorkFlow)包含数据预处理(Processing)、模型学习(Learning)、模型评估(Evaluation)、新样本预测(Prediction)几个步骤。

    • 数据预处理:输入(未处理的数据 + 标签)→处理过程(特征处理+幅度缩放、特征选择、维度约减、采样)→输出(测试集 + 训练集)。

    • 模型学习:模型选择、交叉验证、结果评估、超参选择。

    • 模型评估:了解模型对于数据集测试的得分。

    • 新样本预测:预测测试集。

    6)机器学习应用场景

    作为一套数据驱动的方法,机器学习已广泛应用于数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别和机器人等领域。

    • 智能医疗:智能假肢、外骨骼、医疗保健机器人、手术机器人、智能健康管理等。

    • 人脸识别:门禁系统、考勤系统、人脸识别防盗门、电子护照及身份证,还可以利用人脸识别系统和网络,在全国范围内搜捕逃犯。

    • 机器人的控制领域:工业机器人、机械臂、多足机器人、扫地机器人、无人机等。

    2.机器学习基本名词

    • 监督学习Supervised Learning):训练集有标记信息,学习方式有分类和回归。

    • 无监督学习Unsupervised Learning):训练集没有标记信息,学习方式有聚类和降维。

    • 强化学习Reinforcement Learning):有延迟和稀疏的反馈标签的学习方式。

    • 示例/样本:上面一条数据集中的一条数据。

    • 属性/特征:「色泽」「根蒂」等。

    • 属性空间/样本空间/输入空间X:由全部属性张成的空间。

    • 特征向量:空间中每个点对应的一个坐标向量。

    • 标记:关于示例结果的信息,如((色泽=青绿,根蒂=蜷缩,敲声=浊响),好瓜),其中「好瓜」称为标记。

    • 分类:若要预测的是离散值,如「好瓜」,「坏瓜」,此类学习任务称为分类。

    • 假设:学得模型对应了关于数据的某种潜在规律。

    • 真相:潜在规律自身。

    • 学习过程:是为了找出或逼近真相。

    • 泛化能力:学得模型适用于新样本的能力。一般来说,训练样本越大,越有可能通过学习来获得具有强泛化能力的模型。

    3.机器学习算法分类

    1)机器学习算法依托的问题场景

    机器学习在近30多年已发展为一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动「学习」的算法。

    机器学习算法从数据中自动分析获得规律,并利用规律对未知数据进行预测。机器学习理论关注可以实现的、行之有效的学习算法。很多推论问题属于无程序可循难度,所以部分的机器学习研究是开发容易处理的近似算法。

    机器学习最主要的类别有:监督学习、无监督学习和强化学习。

    监督学习:从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归分析和统计分类。

    无监督学习:与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有生成对抗网络(GAN)、聚类。

    强化学习:通过观察来学习做成如何的动作。每个动作都会对环境有所影响,学习对象根据观察到的周围环境的反馈来做出判断。

    2)分类问题

    分类问题是机器学习非常重要的一个组成部分。它的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。分类问题可以细分如下:

    • 二分类问题:表示分类任务中有两个类别新的样本属于哪种已知的样本类。

    • 多类分类(Multiclass classification)问题:表示分类任务中有多类别。

    • 多标签分类(Multilabel classification)问题:给每个样本一系列的目标标签。

    了解更多机器学习分类算法:KNN算法逻辑回归算法朴素贝叶斯算法决策树模型随机森林分类模型GBDT模型XGBoost模型支持向量机模型等。

    3)回归问题

    了解更多机器学习回归算法:决策树模型随机森林分类模型GBDT模型回归树模型支持向量机模型等。

    4)聚类问题

    了解更多机器学习聚类算法:聚类算法

    5)降维问题

    了解更多机器学习降维算法:PCA降维算法

    4.机器学习模型评估与选择

    1)机器学习与数据拟合

    机器学习最典型的监督学习为分类与回归问题。分类问题中,我们学习出来一条「决策边界」完成数据区分;在回归问题中,我们学习出拟合样本分布的曲线。

    2)训练集与数据集

    我们以房价预估为例,讲述一下涉及的概念。

    • 训练集(Training Set):帮助训练模型,简单的说就是通过训练集的数据让确定拟合曲线的参数。

    • 测试集(Test Set):为了测试已经训练好的模型的精确度。

    当然,test set这并不能保证模型的正确性,只是说相似的数据用此模型会得出相似的结果。因为在训练模型的时候,参数全是根据现有训练集里的数据进行修正、拟合,有可能会出现过拟合的情况,即这个参数仅对训练集里的数据拟合比较准确,这个时候再有一个数据需要利用模型预测结果,准确率可能就会很差。

    3)经验误差

    在训练集的数据上进行学习。模型在训练集上的误差称为「经验误差」(Empirical Error)。但是经验误差并不是越小越好,因为我们希望在新的没有见过的数据上,也能有好的预估结果。

    4)过拟合

    过拟合,指的是模型在训练集上表现的很好,但是在交叉验证集合测试集上表现一般,也就是说模型对未知样本的预测表现一般,泛化(Generalization)能力较差。

    如何防止过拟合呢?一般的方法有Early Stopping、数据集扩增(Data Augmentation)、正则化、Dropout等。

    • 正则化:指的是在目标函数后面添加一个正则化项,一般有L1正则化与L2正则化。L1正则是基于L1范数,即在目标函数后面加上参数的L1范数和项,即参数绝对值和与参数的积项。

    • 数据集扩增:即需要得到更多的符合要求的数据,即和已有的数据是独立同分布的,或者近似独立同分布的。一般方法有:从数据源头采集更多数据、复制原有数据并加上随机噪声、重采样、根据当前数据集估计数据分布参数,使用该分布产生更多数据等。

    • DropOut:通过修改神经网络本身结构来实现的。

    5)偏差

    偏差Bias),它通常指的是模型拟合的偏差程度。给定无数套训练集而期望拟合出来的模型就是平均模型。偏差就是真实模型和平均模型的差异。

    简单模型是一组直线,平均之后得到的平均模型是一条直的虚线,与真实模型曲线的差别较大(灰色阴影部分较大)。因此,简单模型通常高偏差

    复杂模型是一组起伏很大波浪线,平均之后最大值和最小组都会相互抵消,和真实模型的曲线差别较小,因此复杂模型通常低偏差(见黄色曲线和绿色虚线几乎重合)。

    6)方差

    方差(Variance),它通常指的是模型的平稳程度(简单程度)。简单模型的对应的函数如出一辙,都是水平直线,而且平均模型的函数也是一条水平直线,因此简单模型的方差很小,并且对数据的变动不敏感。

    复杂模型的对应的函数千奇百怪,毫无任何规则,但平均模型的函数也是一条平滑的曲线,因此复杂模型的方差很大,并且对数据的变动很敏感。

    7)偏差与方差的平衡

    8)性能度量指标

    性能度量是衡量模型泛化能力的数值评价标准,反映了当前问题(任务需求)。使用不同的性能度量可能会导致不同的评判结果。更详细的内容可见 模型评估方法与准则

    (1)回归问题

    关于模型「好坏」的判断,不仅取决于算法和数据,还取决于当前任务需求。回归问题常用的性能度量指标有:平均绝对误差、均方误差、均方根误差、R平方等

    • 平均绝对误差Mean Absolute Error,MAE),又叫平均绝对离差,是所有标签值与回归模型预测值的偏差的绝对值的平均。

    • 平均绝对百分误差Mean Absolute Percentage Error,MAPE)是对MAE的一种改进,考虑了绝对误差相对真实值的比例。

    • 均方误差Mean Square Error,MSE)相对于平均绝对误差而言,均方误差求的是所有标签值与回归模型预测值的偏差的平方的平均。

    • 均方根误差Root-Mean-Square Error,RMSE),也称标准误差,是在均方误差的基础上进行开方运算。RMSE会被用来衡量观测值同真值之间的偏差。

    • R平方,决定系数,反映因变量的全部变异能通过目前的回归模型被模型中的自变量解释的比例。比例越接近于1,表示当前的回归模型对数据的解释越好,越能精确描述数据的真实分布。

    (2)分类问题

    分类问题常用的性能度量指标包括错误率(Error Rate)、精确率(Accuracy)、查准率(Precision)、查全率(Recall)、F1、ROC曲线、AUC曲线和R平方等。更详细的内容可见 模型评估方法与准则

    • 错误率:分类错误的样本数占样本总数的比例。

    • 精确率:分类正确的样本数占样本总数的比例。

    • 查准率(也称准确率),即在检索后返回的结果中,真正正确的个数占你认为是正确的结果的比例。

    • 查全率(也称召回率),即在检索结果中真正正确的个数,占整个数据集(检索到的和未检索到的)中真正正确个数的比例。

    • F1是一个综合考虑查准率与查全率的度量,其基于查准率与查全率的调和平均定义:即:F1度量的一般形式-Fβ,能让我们表达出对查准率、查全率的不同偏好。

    ROC曲线(Receiver Operating Characteristic Curve)全称是「受试者工作特性曲线」。综合考虑了概率预测排序的质量,体现了学习器在不同任务下的「期望泛化性能」的好坏。ROC曲线的纵轴是「真正例率」(TPR),横轴是「假正例率」(FPR)。

    AUC(Area Under ROC Curve)是ROC曲线下面积,代表了样本预测的排序质量

    从一个比较高的角度来认识AUC:仍然以异常用户的识别为例,高的AUC值意味着,模型在能够尽可能多地识别异常用户的情况下,仍然对正常用户有着一个较低的误判率(不会因为为了识别异常用户,而将大量的正常用户给误判为异常。

    9)评估方法

    我们手上没有未知的样本,如何可靠地评估?关键是要获得可靠的「测试集数据」(Test Set),即测试集(用于评估)应该与训练集(用于模型学习)「互斥」。

    常见的评估方法有:留出法(Hold-out)、交叉验证法( Cross Validation)、自助法(Bootstrap)。更详细的内容可见 模型评估方法与准则

    留出法(Hold-out)是机器学习中最常见的评估方法之一,它会从训练数据中保留出验证样本集,这部分数据不用于训练,而用于模型评估。

    机器学习中,另外一种比较常见的评估方法是交叉验证法Cross Validation)。k 折交叉验证对 k 个不同分组训练的结果进行平均来减少方差,因此模型的性能对数据的划分就不那么敏感,对数据的使用也会更充分,模型评估结果更加稳定。

    自助法(Bootstrap)是一种用小样本估计总体值的一种非参数方法,在进化和生态学研究中应用十分广泛

    Bootstrap通过有放回抽样生成大量的伪样本,通过对伪样本进行计算,获得统计量的分布,从而估计数据的整体分布。

    10)模型调优与选择准则

    我们希望找到对当前问题表达能力好,且模型复杂度较低的模型:

    • 表达力好的模型,可以较好地对训练数据中的规律和模式进行学习;

    • 复杂度低的模型,方差较小,不容易过拟合,有较好的泛化表达。

    11)如何选择最优的模型

    (1)验证集评估选择

    • 切分数据为训练集和验证集。

    • 对于准备好的候选超参数,在训练集上进行模型,在验证集上评估。

    (2)网格搜索/随机搜索交叉验证

    • 通过网格搜索/随机搜索产出候选的超参数组。

    • 对参数组的每一组超参数,使用交叉验证评估效果。

    • 选出效果最好的超参数。

    (3)贝叶斯优化

    • 基于贝叶斯优化的超参数调优。

    视频教程

    可以点击 B站 查看视频的【双语字幕】版本

    【双语字幕+资料下载】斯坦福CS229 | 机器学习-吴恩达主讲(2018·完整版)

    【双语字幕+资料下载】斯坦福CS229 | 机器学习-吴恩达主讲(2018·完整版)

    https://www.bilibili.com/video/BV1TT4y127Nf

    ShowMeAI图解机器学习算法系列(完整版)

    ShowMeAI系列教程精选推荐

    展开全文
  • 如何选择最佳机器学习算法

    千次阅读 2021-01-21 19:05:53
    没有任何一种机器学习算法,能够做到针对任何数据集都是最佳的。通常,拿到一个具体的数据集后,会根据一系列的考量因素进行评估。这些因素包括 :要解决的问题的性质、数据集大小、数据集特征、有无标签等。有了...
  • 在机器学习中,一些比较流行方法的包括:支持向量机...OpenCV实现了其中的八种机器学习算法,所有这些算法都继承自StatModel类,这八种算法是: ·人工神经网络 ·随机树 ·期望最大化 ·k-最近邻 ·............
  • 机器学习算法-十大常用算法

    千次阅读 2021-07-01 11:26:05
    跟我们生活息息相关的最常见机器学习算法包括电影推荐算法、图书推荐算法。这些算法都是基于你的电影观看记录或图书购买记录来给你做推荐的。  James Le在KDnuggets上发布了一篇文章,介绍了他是如何入门机器学习...
  • 前言 机器学习是一门理论性和...算法理论基础不仅包含基本概念、数学基础,也包含了机器学习、深度学习相关。今天给大家推荐一个不错的算法理论基础面试题汇总资源,已开源~ 首先放上这份开源面试题汇总的地址: ...
  • 机器学习的三大要素:数据、算法模型、计算。 机器学习最大的用处是通过对历史数据的分析,找出其中的潜在规律,从而对未来进行预测...根据机器学习算法模型对于训练数据处理方式的不同,通常可以把机器学习算法分为两
  • 常见机器学习算法优缺点总结

    千次阅读 2019-08-04 17:49:46
    常见机器学习算法优缺点总结 1. 回归 回归是一种用于连续型数值变量预测和建模的监督学习算法,使用案例包括房地产价格、股价走势或学生成绩等的预测。 回归任务的特征是具有数值型目标变量的标注数据集。换言之...
  • 机器学习算法地图

    千次阅读 多人点赞 2018-07-05 12:10:07
    其它机器学习、深度学习算法的...文章《机器学习算法地图》系SIGAI原创,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。如需获取原版PDF全文,可搜索关注VX公众号SIGAICN。(https://0x9.me/dxRg5) ...
  • 机器学习算法】模拟退火(Simulated Annealing)

    万次阅读 多人点赞 2022-02-11 00:11:46
    模拟退火算法是机器学习算法中的一种简单的算法。在进行随机梯度下降时,采用模拟退火更新学习率是选择之一。
  • 机器学习算法分类-总览

    千次阅读 2020-03-28 16:52:00
    机器学习算法类型 机器学习算法分类 1. 监督学习(Supervised Learning) 2.无监督学习(Unsupervised Learning) 3.强化学习(Reinforcement Learning) 4.神经网络与深度学习(Neural Networks and DeepLearning) ...
  • 十大机器学习算法的一个小总结

    千次阅读 多人点赞 2019-10-11 19:09:02
    在公众号看到来一篇不错的文章,讲解机器学习算法的,感觉挺好的,所以这里对常用的机器学习算法做一个小的总结, 然后根据学习李航老师的《统计学习方法》做得笔记,对这些算法进行补充。 简介   关于机器学习...
  • 机器学习算法分类

    千次阅读 2019-09-19 14:31:56
    机器学习算法分类按照学习方式可以分为如下四类按照学习任务可以分成如下三类综合来看功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表...
  • 在本指南中,我们将通过现代机器学习算法进行实用,简洁的介绍。虽然存在其他这样的列表,但它们并没有真正解释每种算法的实际权衡,我们希望在这里做。我们将根据我们的经验讨论每种算法的优缺点。 对机器学习算法...
  • 机器学习算法背后的数学原理

    万次阅读 多人点赞 2020-09-06 09:29:04
    不同的机器学习算法是如何从数据中学习并预测未知数据的呢? ​ 机器学习算法的设计让它们从经验中学习,当它们获取越来越多的数据时,性能也会越来越高。每种算法都有自己学习和预测数据的思路。在本文中,我们将...
  • 我们先带着大家过一遍传统机器学习算法,基本思想和用途。把问题解决思路和方法应用建议提前到这里的想法也很简单,希望能提前给大家一些小建议,对于某些容易出错的地方也先给大家打个预防针,这样在理解后续相应...
  • 机器学习:常见的机器学习算法归纳

    万次阅读 多人点赞 2021-03-11 09:22:43
    1) .回归算法 2) .基于实例的算法 3) .决策树学习 4) .贝叶斯方法 5) .基于核的算法 6) .聚类算法 7) .降低维度算法 8) .关联规则学习 9) .集成算法 10) .人工神经网络
  • 机器学习算法模型搭建实验(人口收入普查分析)机器学习算法模型搭建实验(人口收入普查分析)具体步骤如下:1.下载数据源2.清洗数据3.构造机器学习平台模型1.登录腾讯云控制台,到云产品里选择智能钛机器学习平台3....
  • 机器学习算法分类及数据集划分

    千次阅读 2020-10-06 11:08:37
    2.2 机器学习算法分类 监督学习:既有特征值又有目标值。 无监督学习:只有特征值,无目标值。 2.3 监督学习 2.3.1 分类 (离散型) 1. K-近邻算法: 2. 贝叶斯分类: 3.决策树与随机森林: 4.逻辑回归: 5.神经网络...
  • 机器学习算法(15)之Xgboost算法

    万次阅读 多人点赞 2018-09-11 14:32:27
    这篇文章将会是对前两篇文章的深化,谈的是一个更加优化了的boostIng算法,自从2014年9月份在 Kaggle 的希格斯玻色子机器学习大赛中夺魁以来,XGBoost 与深度学习两个算法垄断了 Kaggle 大赛的大部分冠军。现在...
  • 图解十大经典机器学习算法入门

    万次阅读 多人点赞 2018-01-30 14:07:46
    弱人工智能近几年取得了重大突破,悄然间,已经成为每个人生活中必不可少的一部分。以我们的智能手机为例,看看到底温...传统的机器学习算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。这篇文章将对
  • 机器学习算法 无监督学习 算法

    千次阅读 2019-06-26 14:51:22
    本文介绍无监督学习算法: 聚类算法 Apriori算法 FP-growth 算法 1 聚类算法 2 Apriori算法 3 FP-growth 算法
  • 机器学习算法(一)SVM

    万次阅读 多人点赞 2019-06-02 11:31:08
    支持向量机(support vector machines,SVM)是一种二分类模型,它将实例的特征向量映射为空间中的一些点,SVM 的目的就是想要画出一条线,以 “最好地” 区分这两类点,以至如果以后有了新的点,这条线也能做出很好...
  • 机器学习算法之分类

    万次阅读 多人点赞 2018-05-24 19:35:32
    机器学习算法是一类能从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法 [1]。机器学习(Machine Learning)是人工智能(AI)中很重要的一部分,因为在目前的实践过程中,大多数人工智能问题是由机...
  • 我应该使用哪种机器学习算法

    千次阅读 2018-12-16 14:56:05
    我应该使用哪种机器学习算法? 该资源主要面向初学者到中级数据科学家或分析师,他们有兴趣识别和应用机器学习算法来解决他们感兴趣的问题。 当面对各种各样的机器学习算法时,初学者提出的一个典型问题是“我应该...
  • 8种常见机器学习算法比较

    万次阅读 多人点赞 2018-09-13 19:48:11
    机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法,诸如SVM...
  • 机器学习算法——线性回归(超级详细且通俗)

    万次阅读 多人点赞 2020-11-01 13:19:57
    梯度下降法是通用的,包括更为复杂的逻辑回归算法中也可以使用,但是对于较小的数据量来说它的速度并没有优势 正规方程的速度往往更快,但是当数量级达到一定的时候,还是梯度下降法更快,因为正规方程中需要对矩阵...
  • 向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx现在互联网行业很多开发工程师(包括前端开发、后端开发等等传统意义上的“码农”)会遇到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 614,073
精华内容 245,629
关键字:

机器学习算法