<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ 机器学习 - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ 机器学习 - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:28:45 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/machine-learning/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 如何通过机器学习计算两个数字的和 ]]>
                </title>
                <description>
                    <![CDATA[ 在机器学习领域，我们经常会遇到复杂的问题，从图像识别到自然语言处理。 但是，让我们退后一步，探索一些更基本但同样有趣的东西：加法！是的，你没看错，就是加法。 在本教程中，我们将构建一个神经网络，学习计算两个数字的和。 在开始学习之前，有一点需要注意：在实践中，我不建议使用机器学习求两个数的和。我在开始学习机器学习时，出于好奇尝试了一下。我只是希望与大家分享，让学习变得有趣。 你可以将本教程作为机器学习之旅的入门指南。初级机器学习工程师有时很难找到好的、干净的数据集。如果没有可靠的数据集，就很难研究和学习机器学习问题。 不过你不用担心，在本教程中，我们将创建自己的数据集（将成对的数字相加）并清理数据。这样，你就有了一个好的数据集，可以处理自己的问题以及训练模型。 好了，在深入学习之前，我们先来学习一些机器学习和深度学习的基础知识。 深度学习基础知识 我将在练习中使用一些机器学习和深度学习术语。因此，在深入学习之前，最好先通过几句话大概理解它们。 神经网络（Neural Network） 神经网络是一种计算模型，其灵感来源于人脑的结构和功能。它由一层层相互连接的节点（神经元 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-add-two-numbers-using-machine-learning/</link>
                <guid isPermaLink="false">64dc3c2427eec403cd3f26ed</guid>
                
                    <category>
                        <![CDATA[ 机器学习 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Wed, 16 Aug 2023 04:19:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/08/Sum-of-2-numbers-using-ML---Banner.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/how-to-add-two-numbers-using-machine-learning/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">https://www.freecodecamp.org/news/how-to-add-two-numbers-using-machine-learning/</a>
      </p><p>在机器学习领域，我们经常会遇到复杂的问题，从图像识别到自然语言处理。</p><p>但是，让我们退后一步，探索一些更基本但同样有趣的东西：加法！是的，你没看错，就是加法。</p><p>在本教程中，我们将构建一个神经网络，学习计算两个数字的和。</p><p>在开始学习之前，有一点需要注意：在实践中，我不建议使用机器学习求两个数的和。我在开始学习机器学习时，出于好奇尝试了一下。我只是希望与大家分享，让学习变得有趣。</p><p>你可以将本教程作为机器学习之旅的入门指南。初级机器学习工程师有时很难找到好的、干净的数据集。如果没有可靠的数据集，就很难研究和学习机器学习问题。</p><p>不过你不用担心，在本教程中，我们将创建自己的数据集（将成对的数字相加）并清理数据。这样，你就有了一个好的数据集，可以处理自己的问题以及训练模型。</p><p>好了，在深入学习之前，我们先来学习一些机器学习和深度学习的基础知识。</p><h2 id="-">深度学习基础知识</h2><p>我将在练习中使用一些机器学习和深度学习术语。因此，在深入学习之前，最好先通过几句话大概理解它们。</p><h3 id="-neural-network-">神经网络（<strong>Neural Network</strong>）</h3><p>神经网络是一种计算模型，其灵感来源于人脑的结构和功能。它由一层层相互连接的节点（神经元）组成。神经网络通过数据训练来学习模式并进行预测。</p><h3 id="-activation-function-">激活函数（<strong>Activation Function</strong>）</h3><p>激活函数应用于神经元的输出，以增加非线性。它允许神经网络学习数据中的复杂关系。常见的激活函数包括 ReLU（整流线性单位函数）和 Sigmoid 函数。</p><h3 id="-loss-function-">损失函数（<strong>Loss Function</strong>）</h3><p>损失函数是衡量模型预测与真实目标值匹配程度的指标。在训练过程中，目标是最小化损失函数，引导模型做出更好的预测。</p><h3 id="-gradient-descent-">梯度下降法（<strong>Gradient Descent</strong>）</h3><p>梯度下降法是一种用于最小化损失函数的优化算法。它以损失函数相对于参数的梯度为导向，沿着最陡下降的方向迭代调整模型参数。</p><h3 id="-backpropagation-">反向传播（Backpropagation）</h3><p>反向传播是一种用于训练神经网络的基本算法。它计算与每个模型参数相关的损失函数梯度，并在梯度下降过程中通过网络向后传播以更新权重。</p><h3 id="-batch-size-">批次数量（Batch Size）</h3><p>批量大小表示训练过程中一次正向/反向传递所使用的训练样本数量。批次大小越大，训练速度越快，但需要的内存也越多。</p><h3 id="-epoch-">训练轮数（Epoch）</h3><p>一个 Epoch 表示在训练过程中对整个训练数据集进行一次完整的迭代。</p><p>在广阔的机器学习和深度学习领域，你会遇到很多术语，以上只是其中的几个。但它们足以帮助你理解下面的练习。</p><h2 id="--1">准备</h2><p>以下是一份帮助你开始学习机器学习基础知识的清单。在学习本教程之前，你应该安装并准备好这些工具（但并非必须）。</p><ul><li>安装 Anaconda（它打包了许多默认的机器学习库）。</li><li>在 Anaconda 中创建一个环境：强烈建议这样做，因为如果出现问题，只有创建的环境会受到影响。你的整个 Anaconda 安装不会受到影响。</li><li>确保你有一个良好的代码编辑器/IDE，如 Visual Studio Code。</li><li>安装 Keras（这是本练习的特定要求）。</li></ul><p>这些都准备好了吗？希望你保持好状态。让我们开始练习吧。</p><h2 id="--2">如何使用机器学习求两个数的和</h2><h3 id="--3">创建文件夹和文件</h3><p>创建一个新文件夹，给它取个名字。导航进入文件夹并创建名为 <code>addition.ipynb</code> 的文件。在 Visual Studio Code 或其他 IDE 中打开该文件夹。</p><p>然后，按下 VS Code 左上角的 “+ Code” 按钮，为以下各部分创建代码块。</p><h3 id="--4"><strong>导入库</strong></h3><p>使用这些命令导入 <code>numpy</code> 和 <code>keras</code> 库：</p><figure class="kg-card kg-code-card"><pre><code class="language-py">import numpy as np
from keras.models import Sequential
from keras.layers import Dense</code></pre><figcaption>导入要求的库</figcaption></figure><h3 id="--5"><strong>准备数据</strong></h3><p>机器学习模型的准确性有赖于训练模型的数据。</p><p>为了创建我们在这里需要的加法数据，让我们创建 1000 对随机数字作为输入。输出将是每对数字之和。</p><figure class="kg-card kg-code-card"><pre><code class="language-py">num_samples = 1000
X_train = np.random.rand(num_samples, 2)
y_train = X_train[:, 0] + X_train[:, 1]</code></pre><figcaption>生成输入数据集</figcaption></figure><h3 id="--6">定义神经网络</h3><p>让我们构建一个有两个输入层的神经网络——一个有 8 个神经元的隐藏层和一个有单个神经元的输出层。我们将使用 “relu” 激活函数。</p><figure class="kg-card kg-code-card"><pre><code class="language-py">model = Sequential()
model.add(Dense(8, input_shape=(2,), activation='relu'))
model.add(Dense(1))</code></pre><figcaption>定义有 2 个输入层的模型</figcaption></figure><h3 id="--7">编译模型</h3><p>使用 MSE（<strong>均方误差</strong>）作为损失函数和 Adam 优化器编译模型。</p><figure class="kg-card kg-code-card"><pre><code class="language-python">model.compile(loss='mse', optimizer='adam')</code></pre><figcaption>使用 MSE 编译模型</figcaption></figure><h3 id="--8"><strong>训练模型</strong></h3><p>对模型进行 100 轮训练，批次数量为 32。</p><figure class="kg-card kg-code-card"><pre><code class="language-py">batch_size = 32
epochs = 100
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1)</code></pre><figcaption>训练模型</figcaption></figure><p>这可能需要几秒钟，取决于你的 CPU 配置。我的笔记本电脑大约需要 10 到 15 秒才能完成。</p><h3 id="--9"><strong>测试模型</strong></h3><p>现在我们已经训练好了模型，让我们用一些自定义输入来测试它。我使用了两个输入，但你也可以使用任意数量的输入来测试你的模型。</p><figure class="kg-card kg-code-card"><pre><code class="language-python">test_input = np.array([[1, 2], [0.3, 0.4]])
predicted_sum = model.predict(test_input)</code></pre><figcaption>通过自定义输入预测输出</figcaption></figure><h3 id="--10">打印数值</h3><p>预测已经完成。让我们打印预测值，看看它们是否正确：</p><figure class="kg-card kg-code-card"><pre><code class="language-python">print("Predicted sums:")
print(predicted_sum)</code></pre><figcaption>打印预测的总和</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/07/image-187.png" class="kg-image" alt="image-187" width="600" height="400" loading="lazy"><figcaption>预测值的输出示例</figcaption></figure><p>很接近，对吧？</p><h2 id="--11"><strong>总结</strong></h2><p>在本教程中，你学会了如何构建一个执行加法运算的神经网络。</p><p>如果你感到好奇，也可以尝试构建一个神经网络来执行减法运算。祝你好运 :)</p><p>希望你喜欢阅读本文。如果你想了解更多有关人工智能/机器学习/深度学习的信息，请访问我的<a href="https://5minslearn.gogosoon.com/?ref=fcc_addition_nn">网站</a>订阅我的文章，那里有我所有博客的综合列表。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 9 个核心机器学习算法 ]]>
                </title>
                <description>
                    <![CDATA[ 如今，机器学习 [https://gum.co/pGjwd] 正改变着我们的世界。借助机器学习（ML），谷歌在为我们推荐搜索结果，奈飞在为我们推荐观看影片，脸书在为我们推荐可能认识的朋友。 机器学习从未像在今天这样重要。但与此同时，机器学习这一领域也充斥着各种术语，晦涩难懂，各种机器学习的算法每年层出不穷。 本篇文章将向您介绍机器学习领域的基础概念。更确切地说，我们将讨论时下9大核心机器学习算法背后的基本概念。 推荐系统 什么是推荐系统？ 推荐系统 [https://nickmccullum.com/python-machine-learning/introduction-recommendation-systems/] 的用途在于在一个数据集中寻找相似的条目。 推荐系统在现实世界最常见的应用莫过于奈飞的影视推荐。具体而言，奈飞在向你提供视频在线观看服务时，会根据你已经观看过的内容向你推荐其它影片或电视剧集。 另一个应用实例是脸书“你可能认识的人”这一功能，这一功能会根据你当前的好友列表来向你推荐你可能认识的朋友。 这些开发完善、部署精密的推荐系统内部都十分复杂，且极具消耗 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/a-no-code-intro-to-the-9-most-important-machine-learning-algorithms-today/</link>
                <guid isPermaLink="false">64002a810687e3060be26fc2</guid>
                
                    <category>
                        <![CDATA[ 机器学习 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael He ]]>
                </dc:creator>
                <pubDate>Thu, 02 Mar 2023 04:40:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/03/5f9c9a3c740569d1a4ca2466.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/a-no-code-intro-to-the-9-most-important-machine-learning-algorithms-today/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">9 Key Machine Learning Algorithms Explained in Plain English</a>
      </p><!--kg-card-begin: markdown--><p>如今，<a href="https://gum.co/pGjwd">机器学习</a>正改变着我们的世界。借助机器学习（ML），谷歌在为我们推荐搜索结果，奈飞在为我们推荐观看影片，脸书在为我们推荐可能认识的朋友。</p>
<p>机器学习从未像在今天这样重要。但与此同时，机器学习这一领域也充斥着各种术语，晦涩难懂，各种机器学习的算法每年层出不穷。</p>
<p>本篇文章将向您介绍机器学习领域的基础概念。更确切地说，我们将讨论时下9大核心机器学习算法背后的基本概念。</p>
<h1 id="">推荐系统</h1>
<h3 id="">什么是推荐系统？</h3>
<p><a href="https://nickmccullum.com/python-machine-learning/introduction-recommendation-systems/">推荐系统</a>的用途在于在一个数据集中寻找相似的条目。</p>
<p>推荐系统在现实世界最常见的应用莫过于奈飞的影视推荐。具体而言，奈飞在向你提供视频在线观看服务时，会根据你已经观看过的内容向你推荐其它影片或电视剧集。</p>
<p>另一个应用实例是脸书“你可能认识的人”这一功能，这一功能会根据你当前的好友列表来向你推荐你可能认识的朋友。</p>
<p>这些开发完善、部署精密的推荐系统内部都十分复杂，且极具消耗数字资源。</p>
<h3 id="">推荐系统和线性代数</h3>
<p>要想从零开始构建一个完善的推荐系统，就需要对线性代数有深刻掌握。</p>
<p>也正因如此，如果你此前并未学习过线性代数，本节可能会出现一些你尚不理解的概念。</p>
<p>但别担心，scikit-learn Python图书馆已让构建推荐系统变得非常容易。换句话说，即便你没有很深厚的线性代数背景，你也可以在现实世界中构建出一个推荐系统。</p>
<h3 id="">推荐系统的工作原理是什么呢？</h3>
<p>推荐系统主要分为两类：</p>
<ul>
<li>基于内容的推荐系统</li>
<li>协同过滤推荐系统</li>
</ul>
<p>基于内容的推荐系统在做出推荐时根据的是某条目同已使用条目之间的相似性，这同大众关于推荐系统原理的普遍认知相一致。</p>
<p>协同过滤推荐系统在做出推荐时根据的则是用户同条目互动的知识。从命名上就有所不同的这类系统利用的是一群人的智慧。（这也是其命名中“协同”一词的内涵。）</p>
<p>在现实生活中，协同过滤推荐系统要远比基于内容的推荐系统更加常见。原因主要在于协同过滤推荐系统的推荐结果更准确。此外，一些业内人士也表示协同过滤推荐系统要更易于理解。</p>
<p>协同过滤推荐系统也有一项基于内容的推荐系统所不具备的功能。那就是，它们能够自主学习功能。</p>
<p>也就是说，它们甚至能够依据一些你事先并未设定的属性来展开条目间相似性的识别。</p>
<p>协同过滤推荐系统下又细分两个子类别：</p>
<ul>
<li>基于记忆的协同过滤推荐系统</li>
<li>基于模型的协同过滤推荐系统</li>
</ul>
<p>要在机器学习领域有所成就，并不需要你弄懂这两类协同过滤推荐系统之间的差异，你只要知道协同过滤推荐系统存在不同种类就够了。</p>
<h3 id="">本节小结</h3>
<p>以下是有关我们在这份导学中就推荐系统谈到的一些要点总结：</p>
<ul>
<li>推荐系统在生活中的应用实例</li>
<li>推荐系统的不同类别以及协同过滤推荐系统比基于内容的推荐系统应用更为普遍的原因</li>
<li>推荐系统与线性代数之间的关系</li>
</ul>
<h1 id="">线性回归</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/linear-regression-python/">线性回归</a>的用途在于基于 <code>x</code> 值来预测 <code>y</code> 值。</p>
<h3 id="">线性回归的历史</h3>
<p>19世纪，线性回归由 <a href="https://en.wikipedia.org/wiki/Francis_Galton">Francis Galton</a> 提出。</p>
<p>Galton 是一名研究父母-子女关系的科学家。具体而言，他研究的是父亲身高同其儿子身高之间的关系。</p>
<p>Galton的第一个发现是，儿子倾向于大致同父亲一样高，这并不足为奇。</p>
<p>但后来，获得一个更有趣的发现。那就是，一个儿子的身高倾向于更接近所有人身高的平均值，比其同其父亲身高的接近度还要高。</p>
<p>Galton 为这一现象命名为：回归。用他的话说，“一位父亲的儿子的身高倾向于回归到所有人身高的平均值”。</p>
<p>自此，统计学和机器学习迎来了一个崭新的领域，即回归。</p>
<h3 id="">线性回归的数学原理</h3>
<p>创建回归模型时，我们要做的就是绘制一条尽可能接近数据集中每个点的线。</p>
<p>一个典型的例子是线性回归的“最小二乘法”，该方法仅计算上下方向上的一条线的相似度。</p>
<p>下面这个示例可以帮助阐释这一点：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-linear-regression/least-squares-regression.gif" alt="An example of the math behind least squares regression" width="600" height="400" loading="lazy"></p>
<p>在创建回归模型时，你最终会产出一个方程式。利用它，你可以预测给定x值时的y值，而无需事先知道y值。</p>
<h1 id="">逻辑回归</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/logistic-regression-python/">逻辑回归</a>与线性回归类似。但不同的是，逻辑回归并不计算 <code>y</code> 的数值，而是估计一个数据点所属的类别。</p>
<h3 id="">什么是逻辑回归？</h3>
<p>逻辑回归是一种用于解决分类问题的机器学习模型。</p>
<p>下面是几种机器学习分类问题的举例：</p>
<ul>
<li>垃圾邮件（垃圾还是非垃圾？）</li>
<li>汽车保险索赔（销记还是维修？）</li>
<li>疾病诊断</li>
</ul>
<p>以上每一个分类问题都有且仅有两类，被称为<strong>二进制分类</strong>问题。</p>
<p>逻辑回归非常适合用于解决<strong>二进制分类</strong>问题，我们只需要把不同类别的值分别设定为 <code>0</code> 和 <code>1</code> 就行了。</p>
<p>我们为什么需要逻辑回归？答案是，线性回归模型无法做出二进制分类推测，因为当用一个只包含两个可能值的数据集拟合一条直线时，拟合效果可想而知。</p>
<p>这张图片或能帮助你理解为什么线性回归模型不适用于解决二进制分类问题：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/linear-regression-classification.png" alt="Linear Regression Classification" width="600" height="400" loading="lazy"></p>
<p>图中，<code>y-axis</code> 代表一个肿瘤是恶性的可能性。相反，<code>1-y</code> 代表其为良性的可能性。可以看到，就数据集中的大多数观测值而言，线性回归模型在预测这一可能性方面表现很差。</p>
<p>这也解释了逻辑回归的有用性。它拟合出的最佳曲线有一个偏向，这使它更适合预测分类数据。</p>
<p>下面是使用相同训练数据分别生成的线性回归模型与逻辑回归模型比较：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/linear-vs-logistic-regression.png" alt="Linear Regression vs Logistic Regression" width="600" height="400" loading="lazy"></p>
<h3 id="s">S型函数</h3>
<p>逻辑回归模型生成的曲线之所以有一个偏向是因为它不是用线性方程计算得的，而是由S型函数（因其在逻辑回归中的应用又名逻辑函数）构建。</p>
<p>要在机器学习领域有所成就，你并不需要记忆 <a href="https://en.wikipedia.org/wiki/Sigmoid_function">S型函数</a>，但是理解它的外形还是对你有帮助的。</p>
<p>其方程如下：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/sigmoid-equation.png" alt="The Sigmoid Equation" width="600" height="400" loading="lazy"></p>
<p>有关S型函数值得知道的一点是，它有这样一个主要特征：无论你输入的值有多大，该函数输出的值始终分布在0到1之间。</p>
<h3 id="">利用逻辑回归模型开展预测</h3>
<p>要利用线性回归模型进行预测，通常需要设定一个临界点，该临界点通常为 <code>0.5</code>。</p>
<p>我们不妨使用先前图片中的癌症诊断示例来在实践中理解这一原理。如果逻辑回归模型输出的值低于0.5，该数据点将被归为良性肿瘤。反之，如果S型函数输出的值大于0.5，则将被归为恶性。</p>
<h3 id="">使用混淆矩阵来衡量逻辑回归的性能</h3>
<p>在机器学习领域，混淆矩阵可以用于比较真阳性，真阴性，假阳性和假阴性。</p>
<p>尤其是在衡量逻辑回归模型的性能时，混淆矩阵非常有用。下面是混淆矩阵的一个使用示例：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-logistic-regression/confusion-matrix.png" alt="An Example Confusion Matrix" width="600" height="400" loading="lazy"></p>
<p>图中，TN代表“真阴性”，FN代表“假阴性”。FP代表“假阳性”，TP代表“真阳性”。</p>
<p>混淆矩阵可用于评估模型在混淆矩阵的某一特定象限中是否性能很差。举例来说，图中模型的假阳性异常偏高。</p>
<p>这种评估在某些应用场景中可以发挥很大的用处。它可以确保模型在混淆矩阵中极为危险的区域仍能表现良好。</p>
<p>拿癌症的例子来说，你会非常想要确定你的模型没有很高的假阴性率。因为真是那样的话，就意味着一个人明明患有恶性肿瘤，但你却将其错误地归为了良性。</p>
<h3 id="">本节小结</h3>
<p>本节，你初次了解了逻辑回归机器学习模型。</p>
<p>以下是你就逻辑回归学到的知识总结：</p>
<ul>
<li>哪些类型的分类问题适合利用逻辑回归模型解决</li>
<li>逻辑函数（也称为S型函数）的输出值永远在0到1之间</li>
<li>如何借助临界点来利用逻辑回归机器学习模型进行预测</li>
<li>为什么混淆矩阵可用于衡量逻辑回归模型的性能</li>
</ul>
<h1 id="k">K近邻算法</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/k-nearest-neighbors-python/">K近邻算法</a>可以帮助解决类别多于两个的分类问题。</p>
<h3 id="k">什么是K近邻算法？</h3>
<p>K近邻算法是一种分类算法。其基于的原理非常简单，通过一个示例我们便能对其进行很好的理解。</p>
<p>假设你有一些足球运动员和篮球运动员的身高、体重数据，那么当数据中出现了一个新运动员时，K近邻算法便可帮你推测这名运动员是足球运动员还是篮球运动员。</p>
<p>为实现这一推测，K近邻算法会识别最接近新观测值的 <code>K</code> 个数据点。</p>
<p>下图是这一过程的展示，其中K值为 <code>3</code>：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-nearest-neighbors/k-nearest-neighbors.jpg" alt="A visualization of k nearest neighbors" width="600" height="400" loading="lazy"></p>
<p>图中，我们将足球运动员数据点标记为了蓝色，篮球运动员标记为了橙色，待归类的数据点标记为了绿色。</p>
<p>由于新数据点最邻近的数据点中大多数（2/3）是蓝色（足球运动员），因此K近邻算法预测这一新数据点也应为蓝色（足球运动员）。</p>
<h3 id="k">建立K近邻算法的步骤</h3>
<p>通常，建立一个K近邻算法有以下步骤：</p>
<ol>
<li>存储所有数据</li>
<li>计算从新数据点 <code>x</code> 到数据集中其它所有数据点的  <a href="https://en.wikipedia.org/wiki/Euclidean_distance">欧式距离</a></li>
<li>按照距新数据点 <code>x</code> 的距离递增的顺序对数据集中的各数据点进行排序</li>
<li>根据距新数据点 <code>x</code> 最近的 <code>K</code> 个数据点中绝大多数所属的类别推测新数据点的类别</li>
</ol>
<h3 id="kk">K近邻算法中K值的重要性</h3>
<p>尽管在一开始可能并不明显，但在K近邻算法中更改 <code>K</code> 值的大小或将改变对新数据点所属类别的推测结果。</p>
<p>具体而言，如果 <code>K</code> 值很小，那么一个模型便能完美地预测训练数据，但在预测测试数据时会表现较差。同样，<code>K</code> 值太大则会导致模型过于复杂。</p>
<p>下图很好地说明了这一问题：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-nearest-neighbors/k-value-error-rates.png" alt="K value and error rates" width="600" height="400" loading="lazy"></p>
<h3 id="k">K近邻算法的优缺点</h3>
<p>在K近邻算法介绍的最后，我想简要讨论一下使用该模型的利弊。</p>
<p>这是使用K近邻算法的一些主要优点：</p>
<ul>
<li>该算法简单易懂</li>
<li>训练模型时没太大必要在新的训练数据上训练</li>
<li>适用于分类问题中的任何数量的类别</li>
<li>向数据集中添加更多数据时较为容易</li>
<li>该模型仅包含两个参数：<code>K</code> 值和使用的距离指标（通常是欧式距离）</li>
</ul>
<p>同时，以下是该算法的一些主要缺点：</p>
<ul>
<li>由于需要对整个数据集进行排序，做出预测的计算成本高</li>
<li>不适用于分类功能</li>
</ul>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关k近邻算法的知识总结：</p>
<ul>
<li>K近邻算法可以解决的分类问题示例（足球运动员与篮球运动员的例子）</li>
<li>K近邻算法如何依据相邻数据点的欧几里得距离来预测新数据点属于哪个类别</li>
<li>为什么 <code>K</code> 值的大小对预测结果很重要</li>
<li>使用K近邻算法的优缺点</li>
</ul>
<h1 id="">决策树和随机森林</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/decision-trees-random-forests-python/">决策树和随机森林</a>都归属于树方法。</p>
<p>具体来说，决策树也是一种机器学习模型，用于通过循环遍历数据集中的每个特征进行预测。随机森林则是按照数据集中的各个特征随机排布的决策树集合。</p>
<h3 id="">什么是树方法？</h3>
<p>树方法是机器学习的一种方法。在深入探讨其理论依据之前，我们不妨先看一个示例。</p>
<p>假设你每个星期一都打篮球，而且你总是邀请同一个朋友和你一起打。</p>
<p>而你的这位朋友有些时候来了，有些时候没来。</p>
<p>他是否会来取决于多个因素，如天气好坏，气温高低，风的大小，身体疲惫程度。你渐渐注意到了这些因素，并开始记录你朋友是否会来的决定以及当天这些因素的具体情况。</p>
<p>如此一来，你便可以用这些数据来预测你的朋友在某个周一是否会来，而你预测时可选择的方法之一就是决策树。下图是本示例中的决策树：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-decision-tree/decision-tree.png" alt="An example of a decision tree" width="600" height="400" loading="lazy"></p>
<p>每个决策树中都有两种构成元素：</p>
<ul>
<li><code>节点</code>：位于决策树根据某个属性的值分叉的位置</li>
<li><code>方案枝</code>：拆分到下一个节点的结果</li>
</ul>
<p>上图中，可以看到的一些节点有 <code>outlook（推测）</code>，<code>humidity（湿度）</code> 和 <code>windy（风）</code>。这些属性的每种潜在值旁边都有一条树枝状的线条。</p>
<p>在继续深入探讨之前，你还需要了解下面两个决策树术语：</p>
<ul>
<li><code>根节点</code>：进行第一次拆分的节点</li>
<li><code>叶节点</code>：预测最终结果的终端节点</li>
</ul>
<p>现在，你对决策树已经有了一个基本的了解。在下一部分的讲解中，我们将学习如何从零开始构建决策树。</p>
<h3 id="">如何从零开始构建决策树</h3>
<p>构建一个决策树比你想象的要难，因为要确定分割数据的特征（一个属于<a href="https://en.wikipedia.org/wiki/Entropy">熵</a>和<a href="https://machinelearningmastery.com/information-gain-and-mutual-information/#:~:text=Information%20gain%20is%20the%20reduction,before%20and%20after%20a%20transformation.">信息增益</a>） 范畴的话题）在数学上是一个非常复杂的问题。</p>
<p>为了解决这个问题，机器学习从业人员通常会使用多个决策树，这些决策树分割特征的选取是从众多样本中随机挑选的。</p>
<p>换句话说，每个决策树在每个分割处都会随机选择一个新的特征样本，该方法被称为<strong>随机森林</strong>。</p>
<p>总体而言，从业人员通常会将数据集中的特征总数 <code>p</code> 的平方根作为随机特征样本中包含的样本数量 <code>m</code>。简而言之，<code>m</code> 等于 <code>p</code> 的平方根，每一个分割特征将从 <code>m</code> 中随机选择。</p>
<p>如果现在你无法完全理解也不必担心。当你最终构建第一个随机森林模型时，你便会对一切认识得更加清楚。</p>
<h3 id="">使用随机森林的优点</h3>
<p>想象一下，假设你正在使用的数据集有一项非常显著的特征，这一特征比数据集中的其它任何特征都更能准确预测最终结果。</p>
<p>如果你用手工去构建决策树，便会将此特征画在决策树的顶部分叉，这也就意味着你将拥有多棵预测相关性很高的决策树。</p>
<p>然而，我们要避免这种情况的发生，因为取高度相关变量的平均值不能显著减小方差。相反，通过为随机森林中的每棵树随机选择特征，这些树之间便会失去相关性，从而减小结果模型的方差。这种去相关性是使用随机森林优于手工决策树的主要优势。</p>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关决策树和随机森林的知识总结：</p>
<ul>
<li>可以使用决策树来进行预测的问题示例</li>
<li>决策树的构成元素：<code>节点</code>、<code>方案枝</code>、<code>根节点</code>和<code>叶节点</code></li>
<li>随机抽取决策树特征样本建立随机森林的原理</li>
<li>为什么使用随机森林对变量进行去相关有助于减小最终模型的方差</li>
</ul>
<h1 id="">支持向量机</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/support-vector-machines-python/">支持向量机</a>属于分类算法（尽管从技术上讲，它们也可以用于解决回归问题），它通过切分类别之间的最大差距，将数据集分为多个类别。稍后我们将以图示的方式对这一概念进行更加清晰的认识。</p>
<h3 id="">什么是支持向量机？</h3>
<p><a href="https://en.wikipedia.org/wiki/Support_vector_machine">支持向量机</a>是一种监督机器学习模型，简称SVMs（Support vector machines），该类模型具有用于分析数据和识别模式的关联学习算法。</p>
<p>支持向量机既可用于分类问题也可用于回归问题。本文将专门研究使用支持向量机解决分类问题。</p>
<h3 id="">支持向量机如何工作？</h3>
<p>让我们一探究竟。</p>
<p>给定一组训练样本  – 标记每个样本属于两个类别中的一个  – 支持向量机训练算法建立模型。这样，输入新样本时，该模型便会将其归为两个类别之一。由此，支持向量机便成了一个非概率二进制线性分类器。</p>
<p>SVM进行分类预测时所依据的是几何学。</p>
<p>具体而言，SVM模型会将数据点映射为空间中的点并将每个单独的类别分隔开来，从而使划分的开放间隙尽可能宽。根据新数据点属于间隙的哪一侧，SVM将预测它们属于哪个类别。</p>
<p>下图是一个可视化示例，可以帮你更好理解支持向量机背后的机理：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/image-57.png" alt="image-57" width="600" height="400" loading="lazy"></p>
<p>如图所示，如果新数据点位于绿线的左侧，则SVM会将其标记为红色类别。反之，如果新数据点位于绿线的右侧，SVM则会将其标记为蓝色类别。</p>
<p>而这条绿线被称为<strong>超平面</strong>，这是支持向量机算法相关的一个重要术语。</p>
<p>让我们看一下支持向量机的另一种视觉表示形式：</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/image-58.png" alt="image-58" width="600" height="400" loading="lazy"></p>
<p>这幅图中的超平面被标记为了<strong>最佳超平面</strong>。支持向量机理论将<strong>最佳超平面</strong>定义为能够最大化每个类别之间最接近的几个数据点之间间距的超平面。</p>
<p>如图所示，示例中的边距线共接触到三个数据点，其中两个来自红色类别，一个来自蓝色类别。这些触及边距线的数据点被称为<strong>支持向量</strong>，支持向量机也因其得名。</p>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关支持向量机的知识总结：</p>
<ul>
<li>支持向量机是一种监督机器学习算法</li>
<li>支持向量机可用于解决分类和回归问题</li>
<li>支持向量机是如何利用（可最大化数据集中类别之间间距的）<strong>超平面</strong>对数据点进行分类的</li>
<li>支持向量机中，接触边距线的数据点被称为<strong>支持向量</strong>，支持向量机也因其得名。</li>
</ul>
<h1 id="k">K均值聚类</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/k-means-clustering-python/">K均值聚类</a>是一种可用于识别数据集内类似数据片段的机器学习算法。</p>
<h3 id="k">什么是K均值聚类？</h3>
<p>K均值聚类是一种无监督机器学习算法。</p>
<p>意思是说，接收未标记的数据后它会尝试将数据中类似的观测组归在一起。</p>
<p>K均值聚类算法在解决现实问题时非常有用。下面是该机器学习模型的几个应用举例：</p>
<ul>
<li>帮助营销团队对客户进行细分</li>
<li>文件分类</li>
<li>帮助亚马逊、UPS、联邦快递等公司最优化快递运输路线</li>
<li>识别、应对城市犯罪中心</li>
<li>专业运动分析</li>
<li>预防网络犯罪</li>
</ul>
<p>K均值聚类算法的主要功能是将数据集划分为不同的组，使每组内的观测结果彼此相似。</p>
<p>下图是其实际运作的可视化呈现：</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-means-clustering/k-means-clustering.png" alt="A Visualization of a K Means Clustering Algorithm" width="600" height="400" loading="lazy"></p>
<p>我们将在下一节探索K均值聚类背后的数学原理。</p>
<h3 id="k">K均值聚类算法如何运作？</h3>
<p>运行K均值聚类算法的第一步是选择要将数据划分为多少个集群。这一集群数便是该算法名称中的 <code>K</code> 值。</p>
<p>使用K均值聚类算法时，<code>K</code> 值的选择非常关键。稍后我们会讨论如何选择合适的 <code>K</code> 值。</p>
<p>下一步，必须随机将数据集中的每个数据点都分配到随机聚类中，这也是第一步任务的根源所在。然后运行以下迭代，直到集群停止更改：</p>
<ul>
<li>通过计算该集群内数据点的平均向量来计算每个集群的几何中心</li>
<li>将每个数据点重新分配到同其先前所在集群几何中心最接近的集群</li>
</ul>
<p>下面的动画是这一实践过程的示例。其中，K均值聚类算法的 <code>K</code> 值为 <code>3</code>。可以看到，每个集群的几何中心均由黑色的 <code>+</code> 字符表示。</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-means-clustering/k-means-iteration.gif" alt="A Visualization of a K Means Clustering Algorithm" width="600" height="400" loading="lazy"></p>
<p>如图所示，此迭代将一直持续到集群停止更改为止，这一停止更改意味着数据点将不会再被分配到新的集群。</p>
<h3 id="kk">为K均值聚类算法选择合适的K值</h3>
<p>要为K均值聚类算法选择一个合适的 <code>K</code> 值实际上相当困难。该值的“最佳”选择没有“标准”答案。</p>
<p>机器学习从业者经常使用的一种方法叫作<strong>肘部法</strong>。</p>
<p>使用肘部法时，第一步要先计算一组 <code>K</code> 值下K均值聚类算法的误差平方和（SSE，sum of squared errors）。SSE表示一个集群中的每个数据点与该集群几何中心之间的距离的平方之和。</p>
<p>举例来说，计算 SSE时，你可以选择 <code>K</code> 值为 <code>2</code>、<code>4</code>、<code>6</code>、<code>8</code>、<code>10</code>。</p>
<p>接着，将不同 <code>K</code> 值下的SSE绘制在图表中。可以看到，随着 <code>K</code> 值的增大，错误逐渐减少。</p>
<p>这也是符合常理的——数据集中创建的类别越多，每个数据点接近其特定集群几何中心的可能性就越大。</p>
<p>说了这么多，肘部法的用意就在于选择SSE下跌速度突然放缓处的 <code>K</code> 值，这种突然的放缓在图表中往往会生成了一个<code>肘</code>形。</p>
<p>下图是一个SSE和 <code>K</code> 的关系图表示例。图中，肘部法建议的 <code>K</code> 值大约为 <code>6</code>。</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-k-means-clustering/elbow-method.png" alt="A Visualization of a K Means Clustering Algorithm" width="600" height="400" loading="lazy"></p>
<p>值得注意的是，<code>6</code> 只是对最佳 <code>K</code> 值的一种估计。K均值聚类算法中并没有标准的“最佳” <code>K</code> 值。同机器学习领域的许多事物一样，这一最佳选择高度依赖具体情况。</p>
<h3 id="">本节小结</h3>
<p>以下是本节内容的小结：</p>
<ul>
<li>K均值聚类算法能够解决的无监督机器学习问题示例</li>
<li>K均值聚类算法的基础机理</li>
<li>K均值聚类算法的工作原理</li>
<li>如何利用肘方法为K均值聚类模型选择合适的 <code>K</code> 值</li>
</ul>
<h1 id="">主要组件分析</h1>
<p><a href="https://nickmccullum.com/python-machine-learning/principal-component-analysis-python/">主要组件分析</a>用于将多特征数据集转换为具有较少特征的转换数据集，转换数据集中的每个新特征是预先数据集存在特征的线性组合。此转换数据集旨在更简单地解释原始数据集中的绝大部分变量。</p>
<h3 id="">什么是主要组件分析</h3>
<p>主要组件分析是一种用于检查变量集间相互关系的机器学习方法。</p>
<p>不同的是，主要组件分析研究一组变量，以确定这些变量的根本结构。</p>
<p>主要组件分析有时也被称为 <strong><strong>因子分析</strong></strong>。</p>
<p>基于此描述，你可能会感觉主要组件分析与线性回归非常相似。</p>
<p>但事实并非如此。其实，二者存在一些显著区别。</p>
<h3 id="">线性回归与主要组件分析的区别</h3>
<p>线性回归通过数据集确定一条最佳拟合线，而主要组件分析会确定出几条最拟合数据集的正交线。</p>
<p><strong>正交</strong>的意思可以理解为线与线之间呈直角（90度）相交——就像地图上指示北、东、南、西的方向坐标那样。</p>
<p>我们不妨通过下面的示例来帮助你更好的理解。</p>
<p><img src="https://nickmccullum.com/images/python-machine-learning/introduction-principal-component-analysis/principal-component-analysis.png" alt="A principal component analysis" width="600" height="400" loading="lazy"></p>
<p>仔细看图中的轴标。</p>
<p>图中，x轴的主要组件代表了该数据集中73%的变量，y轴的主要组件则解释了数据集中23%的变量。</p>
<p>这就意味着数据集中仍有4%的变量未得到解释。通过在分析中添加更多主要组件，这一未解释变量的数量便能减至更少。</p>
<h3 id="">本节小结</h3>
<p>以下是刚刚讲到的有关主要组件分析的知识总结：</p>
<ul>
<li>主要组件分析致力于找到确定数据集变异性的正交因子</li>
<li>主要组件分析与线性回归之间的区别</li>
<li>正交主要组件在数据集内的可视化图示</li>
<li>添加更多主要组件可以帮助解释数据集中的更多变量</li>
</ul>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 零基础入门机器学习（视频教程） ]]>
                </title>
                <description>
                    <![CDATA[ 机器学习技术现在非常普遍，你可能每天都会使用它几十次，却没有意识到。由于它有如此多的应用，对于任何有大量机器学习经验的人来说，工作前景都很好。 我们刚刚在 freeCodeCamp.org 的 YouTube 频道上发布了一个机器学习课程，这是你开始学习之旅的最佳地方。 Kylie Ying 开发了这个课程。Kylie 曾在许多有趣的地方工作，如麻省理工学院、欧洲核子研究中心和 freeCodeCamp。她是一位物理学家、工程师，也是一位优秀的老师。 这个课程是对许多关键的机器学习概念的一个很好的介绍。在这个视频中，你将了解监督和无监督学习模型背后的逻辑和数学。你还将学习如何能够在谷歌合作项目上对不同的机器学习模型进行编程。 谷歌为本课程的研发提供了资金支持。 以下是本课程涵盖的主题：  * Data/Colab 介绍  * Intro to Machine Learning（机器学习简介）  * Features（特征）  * Classification/Regression（分类/回归）  * Training Model （训练模型）  * Preparing Da ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/machine-learning-for-everybody/</link>
                <guid isPermaLink="false">6348d7ff31b59b077bbb1df4</guid>
                
                    <category>
                        <![CDATA[ 机器学习 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ luojiyin ]]>
                </dc:creator>
                <pubDate>Fri, 14 Oct 2022 03:30:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/10/machinelearning.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/machine-learning-for-everybody/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Machine Learning for Everybody</a>
      </p><!--kg-card-begin: markdown--><p>机器学习技术现在非常普遍，你可能每天都会使用它几十次，却没有意识到。由于它有如此多的应用，对于任何有大量机器学习经验的人来说，工作前景都很好。</p>
<p>我们刚刚在 freeCodeCamp.org 的 YouTube 频道上发布了一个机器学习课程，这是你开始学习之旅的最佳地方。</p>
<p>Kylie Ying 开发了这个课程。Kylie 曾在许多有趣的地方工作，如麻省理工学院、欧洲核子研究中心和 freeCodeCamp。她是一位物理学家、工程师，也是一位优秀的老师。</p>
<p>这个课程是对许多关键的机器学习概念的一个很好的介绍。在这个视频中，你将了解监督和无监督学习模型背后的逻辑和数学。你还将学习如何能够在谷歌合作项目上对不同的机器学习模型进行编程。</p>
<p>谷歌为本课程的研发提供了资金支持。</p>
<p>以下是本课程涵盖的主题：</p>
<ul>
<li>Data/Colab 介绍</li>
<li>Intro to Machine Learning（机器学习简介）</li>
<li>Features（特征）</li>
<li>Classification/Regression（分类/回归）</li>
<li>Training Model （训练模型）</li>
<li>Preparing Data （准备数据）</li>
<li>K-Nearest Neighbors （K-最近邻）</li>
<li>KNN Implementation （KNN 实施）</li>
<li>Naive Bayes （朴素贝叶斯）</li>
<li>Naive Bayes Implementation （朴素贝叶斯实现）</li>
<li>Logistic Regression （逻辑回归）</li>
<li>Log Regression Implementation （对数回归实现）</li>
<li>Support Vector Machine （支持向量机）</li>
<li>SVM Implementation （支持向量机实现）</li>
<li>Neural Networks （神经网络）</li>
<li>Tensorflow （张量流）</li>
<li>Classification NN using Tensorflow （使用 Tensorflow 的分类 NN）</li>
<li>Linear Regression （线性回归）</li>
<li>Lin Regression Implementation （林回归实现）</li>
<li>Lin Regression using a Neuron （使用神经元的 Lin 回归）</li>
<li>Regression NN using Tensorflow （使用 Tensorflow 的回归 NN）</li>
<li>K-Means Clustering （K-Means 聚类）</li>
<li>Principal Component Analysis （主成分分析）</li>
<li>K-Means and PCA Implementations （K-Means 和 PCA 实现）</li>
</ul>
<p>观看下面的完整课程或在 freeCodeCamp.org YouTube 频道上观看（观看 2 小时）。</p>
<!--kg-card-end: markdown--><p><a href="https://youtu.be/i_LwzRVP7bg">YouTube 地址</a></p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/i_LwzRVP7bg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Machine Learning for Everybody – Full Course" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><p><a href="https://www.bilibili.com/video/BV1se4y1q7ji/?spm_id_from=333.337.search-card.all.click&amp;vd_source=0038272cd20b8e9a9d7d15569bd363d9">bilibili 地址，有中英文字幕</a></p><!--kg-card-begin: html--><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.25%;" class="fluid-width-video-wrapper">
            <iframe src="//player.bilibili.com/player.html?aid=561435624&amp;bvid=BV1se4y1q7ji&amp;cid=857565166&amp;page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="256" height="144" name="fitvid1"> </iframe>
          </div>
        </div>
      </figure><!--kg-card-end: html--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何在机器学习中检测异常值——4 种检测异常值的方法 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：How to Detect Outliers in Machine Learning – 4 Methods for Outlier Detection [https://www.freecodecamp.org/news/how-to-detect-outliers-in-machine-learning/] ，作者：Bala Priya C [https://www.freecodecamp.org/news/author/bala-priya/] 你是否使用过现实数据来对机器学习模型进行过训练？如果答案是肯定的，你很可能遇到过_异常点_。 异常点通常_明显_地不同于数据集中其他数据。异常点的存在会扭曲数据集的数据分布，提高数据的不连贯性或使观测产生错误。 为了使训练模型在进行测试时有更好的泛用性，发现并删除异常点非常重要。 在本文中，我们将介绍几个常用来发现并去除异常点的统计学工具。 为什么需要发现异常点 在机器学习流程中_数据清洗_和_数据预处理_是两个关键步骤，它们能帮助你更好地理解你所面对的数据。这些步骤中包括处理丢失值，发现异常值等操作。 过高或过低的异 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-detect-outliers-in-machine-learning/</link>
                <guid isPermaLink="false">62d683f98d13aa0845c62983</guid>
                
                    <category>
                        <![CDATA[ 机器学习 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp.org ]]>
                </dc:creator>
                <pubDate>Tue, 19 Jul 2022 10:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/07/Outlier-Detection-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/how-to-detect-outliers-in-machine-learning/">How to Detect Outliers in Machine Learning – 4 Methods for Outlier Detection</a>，作者：<a href="https://www.freecodecamp.org/news/author/bala-priya/">Bala Priya C</a></p><!--kg-card-begin: markdown--><p>你是否使用过现实数据来对机器学习模型进行过训练？如果答案是肯定的，你很可能遇到过_异常点_。</p>
<p>异常点通常_明显_地不同于数据集中其他数据。异常点的存在会扭曲数据集的数据分布，提高数据的不连贯性或使观测产生错误。</p>
<p>为了使训练模型在进行测试时有更好的泛用性，发现并删除异常点非常重要。</p>
<p>在本文中，我们将介绍几个常用来发现并去除异常点的统计学工具。</p>
<h2 id="">为什么需要发现异常点</h2>
<p>在机器学习流程中_数据清洗_和_数据预处理_是两个关键步骤，它们能帮助你更好地理解你所面对的数据。这些步骤中包括处理丢失值，发现异常值等操作。</p>
<p>过高或过低的异常值常常会扭曲数据集的统计分析结果。这会使得训练出来的模型低效甚至完全无效。</p>
<p>处理异常值需要一定的专业性，在_不清楚_所面对的数据和消除异常值工具适用环境的情况下不应冒然使用。</p>
<p>举例来说，如果你在房价数据集中发现_少量_房价处于150万美金并显著高于所有房价中位数时，这些150万美金的房价很可能是异常值。但是，当数据集包含有大量100万美金以上的房价时，房价呈现上涨趋势。此时将150万美金的房价将视为异常值是_不合适_的。在此情境下，数据分析者需要一定的房地产知识以便正确处理异常值。</p>
<p>发现异常值的目的是为了去除_真正的异常值_以便构建一个泛用的，即使面对未知数据依旧能表现良好的模型。我们将几个有助于发现异常值的统计工具。</p>
<h2 id="">如何通过标准差发现异常值</h2>
<p>如果一组数据，或数据集中某些特征符合<a href="https://mathworld.wolfram.com/NormalDistribution.html">正态分布</a>时，可以考虑使用正态分布及等效的Z-分数（z-score）来发现异常值。</p>
<p>在统计学中，标准差（standard deviation）反映了_数据点和均值（mean）之间的关系+，一言以蔽之，标准差衡量的是数据点离数据的算数平均有多远。</p>
<p>对于正态分布的数据来说，约68.2%的数据在均值的一倍标准差之内。约有95.4%和99.7%的数据点在均值的两倍和三倍标准差以内。</p>
<p>我们约定标准差为σ，算术平均为μ。</p>
<p>一个发现异常值的方法是将_阈值下限_设为均值减去三倍标准差 (μ - 3*σ) ，_阈值上限_设为均值加上三倍标准差 (μ + 3*σ) 。所有在阈值之外的数据点都被视为异常值。</p>
<p>因为99.7%的数据点会在均值的±三倍标准差以内，此方法将会发现并标记0.3%的数据点为异常值。</p>
<h3 id="">使用标准差检测异常点的代码</h3>
<p>我们通过构造一个正态分布的学生分数数据集，用以解释发现异常点的过程。</p>
<p>第一步，载入必须的python库。</p>
<pre><code class="language-Python">import numpy as np
import pandas as pd
import seaborn as sns
</code></pre>
<p>第二步，定义名为<code>generate_scores()</code>的函数，这个函数会生成一个有包含有200个数据的正态分布的分数数据集。我们会使用这个函数生成数据集并存储到变量<code>scores_data</code>中。</p>
<pre><code class="language-Python">def generate_scores(mean=60,std_dev=12,num_samples=200):
	np.random.seed(27)
	scores = np.random.normal(loc=mean,scale=std_dev,size=num_samples)
	scores = np.round(scores, decimals=0)
	return scores
scores_data = generate_scores()
</code></pre>
<p>你可以使用Seaborn的<code>displot()</code>函数来生成数据集分布图像。通过下图可以看出，这个数据集服从正态分布。</p>
<pre><code class="language-Python">sns.set_theme()
sns.displot(data=scores_data).set(title="Distribution of Scores", xlabel="Scores")
</code></pre>
<p><img src="https://lh6.googleusercontent.com/EqfsNr10SYnFcCpdC_5Bdt9Z3jWIsaTI1yCcATGbf10BXTwwqKuJHUMuZT9n6M3bGuU8k4QOA8Vb87BStDzxQRRdQ-MzMwLT2EZZJL4ieB0_u0LnvsUXCkYBTllcll15mF1oGziS1QqZrfYR5A" alt="EqfsNr10SYnFcCpdC_5Bdt9Z3jWIsaTI1yCcATGbf10BXTwwqKuJHUMuZT9n6M3bGuU8k4QOA8Vb87BStDzxQRRdQ-MzMwLT2EZZJL4ieB0_u0LnvsUXCkYBTllcll15mF1oGziS1QqZrfYR5A" width="348" height="381" loading="lazy"></p>
<p>图表1：正态分布</p>
<p>接下来，我们可以把该数据集导入<a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html">Pandas dataframe</a> 以便进一步分析。</p>
<pre><code class="language-python">df_scores = pd.DataFrame(scores_data,columns=['score'])
</code></pre>
<p>你可以使用<code>.mean()</code>和<code>.std()</code>方法来获取数据集<code>df_scores</code>的均值和标准差。</p>
<pre><code class="language-Python">df_scores.mean()
# Output
score    61.005
dtype: float64
df_scores.std()
# Output
score    11.854434
dtype: float64
</code></pre>
<p>像之前说的一样，阈值下限(<code>lower_limit</code>)设为算数平均减去三倍标准差，阈值上限(<code>upper_limit</code>)设为算术平均加上三倍标准差。</p>
<pre><code class="language-Python">lower_limit = df_scores.mean() - 3*df_scores.std()
upper_limit = df_scores.mean() + 3*df_scores.std()
print(lower_limit)
print(upper_limit)
# Output
25.530716709142666
96.47928329085734
</code></pre>
<p>通过上一步我们定义了阈值的上下限，我们可以使用这个阈值<code>[lower_limit, upper_limit]</code>来筛选数据集<code>df_score</code>中处于这个阈值的数据点，代码如下。</p>
<pre><code class="language-Python">df_scores_filtered=df_scores[(df_scores['score']&gt;lower_limit)&amp;(df_scores['score']&lt;upper_limit)]
print(df_scores_filtered)
# Output
score
0     75.0
1     56.0
2     67.0
3     65.0
4     63.0
..     ...
194   42.0
195   76.0
196   67.0
197   74.0
199   53.0
[198 rows x 1 columns]
</code></pre>
<p>通过上面的输出，我们发现这个方法移除了两个数据点，数据集<code>df_scores_filtered</code>包含有198个数据点。</p>
<h2 id="zscore">如何用过z-score检测异常值</h2>
<p>接下来我们尝试使用z-score检测异常值的方法。对于均值为μ标准差为σ的正态分数来说，数据点x的z-score可以这么计算：</p>
<p><strong>z = (x - μ)/σ</strong></p>
<p>通过上述公式，我们可以推导出以下条件：</p>
<ul>
<li>当 x = μ 时，z-score 为 0</li>
<li>当 x = μ ± 1, μ ± 2, 或 μ ± 3 时，z-score 为 ± 1, ± 2, 或 ± 3</li>
</ul>
<p>我们可以发现，通过z-score检测异常值的方法其实等价于我们之前尝试过的通过标准差检测异常值的方法。通过对数据点进行标准化（z = (x - μ)/σ），所有低于标准差方法中低阈（(μ - 3*σ）的数据点将等价于z-score小于-3的数据点。</p>
<p>类似的，通过标准化，大于上阈值（μ + 3*σ）的数据点等价于z-score大于3的数据点。所以上下阈值<code>[lower_limit, upper_limit]</code>可以理解为[-3, 3]。</p>
<p>接下来我们将使用z-score方法来检测数据集<code>df_scores</code>中的异常点。</p>
<h3 id="zscore">使用z-score检测异常点方法的代码</h3>
<p>第一步，我们计算所有数据点的z-score，并把z_score作为新的一列添加进数据集<code>df_scores</code>中。</p>
<pre><code class="language-Python">df_scores['z_score']=(df_scores['score'] - df_scores['score'].mean())/df_scores['score'].std()
df_scores.head()
# Output
score	z_score
0	75.0	1.180571
1	56.0	-0.422205
2	67.0	0.505718
3	65.0	0.337005
4	63.0	0.168291
</code></pre>
<p>第二步，我们用阈值[-3, 3]来过滤掉数据集<code>df_scores</code>中z-score不在范围内的数据点。由于此方法等价与之前解释过的标准差方法，过滤后的数据集包含有198个数据点。</p>
<p>以上两种方法（通过标准差检测异常值和通过z-score来检测异常值）只适用于服从正态分布的数据。</p>
<p>接下来，我们将研究两种对数据分布_没有要求_的检测异常值的方法。</p>
<h2 id="iqr">通过四分位距(IQR)检测异常值的方法</h2>
<p>统计学上，四分位距（IQR）反映了给定数据集中第一和第三分位数之间的距离。</p>
<ul>
<li>第一份位数又称为四分之一分位数或25%分位数</li>
<li>我们约定<code>q25</code>为第一分位数，这意味这数据集中有25%的数据点小于<code>q25</code></li>
<li>第三份位数又称为四分之三分位数或75%分位数</li>
<li>我们约定<code>q75</code>为第三分位数，这意味这数据集中有75%的数据点大于<code>q75</code></li>
<li>使用上述表述方法, <code>IQR = q75 - q25</code></li>
</ul>
<h3 id="iqr">通过四分位距（IQR）检测异常值方法的代码</h3>
<p>我们可以使用箱型图或者箱线图来图形化数据集中的异常值。明显位于箱线图之外的数据点可以被视为异常值。</p>
<p>我们可以使用Seaborn中的<code>boxplot</code>函数生成箱型图。</p>
<pre><code class="language-Python">sns.boxplot(data=scores_data).set(title="Box Plot of Scores")
</code></pre>
<p><img src="https://lh6.googleusercontent.com/PwEktzeOWRSXfPHTG1WBtFkLA536gNo56REH-5_MYnIpO2r01EeI-QGrTuznsticijoik534i-4ylgP0PDUMUmSm3EaOfl7gXQjOUCVw5XQqPWt9AkY_vpbqODMGSpW7CJ8ST2duYamvREoICA" alt="PwEktzeOWRSXfPHTG1WBtFkLA536gNo56REH-5_MYnIpO2r01EeI-QGrTuznsticijoik534i-4ylgP0PDUMUmSm3EaOfl7gXQjOUCVw5XQqPWt9AkY_vpbqODMGSpW7CJ8ST2duYamvREoICA" width="379" height="267" loading="lazy"></p>
<p>图表2：箱型图</p>
<p>现在，我们调用<code>.describe()</code>函数检测数据集<code>df_scores</code>。</p>
<pre><code class="language-Python">df_scores.describe()
# Output
score
count	200.000000
mean	61.005000
std	    11.854434
min	    20.000000
25%	    54.000000
50%	    62.000000
75%	    67.000000
max	    98.000000
</code></pre>
<p>我们使用25%和75%分位数来计算四分位距（IQR），并使用它们（25%分位数到75%分位数）作为阈值。</p>
<pre><code class="language-Python">IQR = 67-54
lower_limit = 54 - 1.5*IQR
upper_limit = 67 + 1.5*IQR
print(upper_limit)
print(lower_limit)
# Output
86.5
34.5
</code></pre>
<p>下一步，利用四分位距（IQR）对数据集<code>df_scores</code>进行筛选。</p>
<pre><code class="language-Python">df_scores_filtered = df_scores[(df_scores['score']&gt;lower_limit) &amp; (df_scores['score']&lt;upper_limit)]
print(df_scores_filtered)
# Output
score
0     75.0
1     56.0
2     67.0
3     65.0
4     63.0
..     ...
194   42.0
195   76.0
196   67.0
197   74.0
199   53.0
[192 rows x 1 columns]
</code></pre>
<p>从以上结果可以看出，四分位距方法把八个数据点标记为异常值，筛选后的数据集包含有192个数据点。</p>
<p>我们除了可以使用<code>.describe()</code>来计算分位数，还可以使用<a href="https://numpy.org/doc/stable/user/index.html#user">NumPy</a>库中的<code>.percentile()</code>函数来计算分位数。</p>
<p>以下代码展示了如何使用<code>.percentile()</code>函数计算第一和第三分位数。</p>
<pre><code class="language-Python">q25,q75 = np.percentile(a = df_scores,q=[25,75])
IQR = q75 - q25
print(IQR)
# Output
13.0
</code></pre>
<h2 id="">利用百分位数方法检测异常值</h2>
<p>上一小节中我们探讨了四分位距和利用它进行异常值检测的方法。四分位距可以认为是百分位数的一个特例，所以我们也可以用百分位数来检测异常值。</p>
<p>上一节中的四分位距方法使用<code>[q25 - 1.5*IQR, q75 + 1.5*IQR]</code>作为阈值，不在此范围内的数据点被标记为异常值。四分位距方法适用于数据点分布较分散的数据集，这种方法倾向于过多的标记异常值。</p>
<p>为了更好地标记异常值，我们可能需要使用除第一和第三分位数之外的其他分位数。接下来我们将通过百分位数方法再次检测scores数据集中的异常值。</p>
<h3 id="">使用百分位数检测异常值方法的代码</h3>
<p>第一步，我们首先找到0.5百分位数和99.5百分位数的范围。我们可以利用<code>.percentile()</code>函数带入<code>q = [0.5, 99.5]</code>来计算这个范围，代码如下：</p>
<pre><code class="language-Python">lower_limit, upper_limit = np.percentile(a=df_scores,q=[0.5,99.5])
print(upper_limit)
print(lower_limit)

# Output
91.035
28.955
</code></pre>
<p>下一步，我们可以使用之前计算的阈值对数据集进行检测。</p>
<pre><code class="language-Python">df_scores_filtered = df_scores[(df_scores['score']&gt;lower_limit) &amp; (df_scores['score']&lt;upper_limit)]
print(df_scores_filtered)

# Output
score
0     75.0
1     56.0
2     67.0
3     65.0
4     63.0
..     ...
194   42.0
195   76.0
196   67.0
197   74.0
199   53.0
[198 rows x 1 columns]
</code></pre>
<p>通过以上代码的结果我们可以看出有两个数据点被标记为异常值，过滤后的数据集包含有198个数据点。</p>
<h2 id="">结语</h2>
<p>本文介绍了什么是异常值，我们为什么需要检测异常值，及我们如何检测异常值。本文介绍了四种最常见的检测异常值的方法。</p>
<p>总结如下：</p>
<ul>
<li>如果要研究的数据或特征符合正态分布，我们可以使用标准差或z-score来标记异常值。通常我们标记超出均值正负三倍标准差的数据点为异常值。</li>
<li>如果要研究的数据不服从正态分布是，我们可以使用四分位距或者百分位数来检测异常值。</li>
</ul>
<p>此外我们还介绍了检测异常值的一些特殊情况。当数据集中有大量数据被标记为异常值时要慎重，因为造成这种情况的原因可能是因为我们手头的数据集属于一个更大更完备的数据集，被标记的异常值可能描述了更大的数据集的分布情况。</p>
<p>除此之外，在检测异常值的过程中要根据数据集的特征适时调整用来筛选检测异常值的阈值。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python 基础教程之应用领域 ]]>
                </title>
                <description>
                    <![CDATA[ 如果你想学习 Python，或者如果你最近开始学习 Python，你也许会这么问自己： “我到底可以使用 Python 做什么？” 这是一个棘手的问题去回答，因为已经有许多 Python 的程序。 但是随着时间的迁移，我发现 Python 有三个主要的流行应用程序：  * Web 开发  * 数据科学 - 包括机器学习，数据分析和数据可视化  * 脚本编写 我们依次讨论它们。 Web开发 基于 Python 的 web 框架（比如 Django 和 Flask ）最近变得非常流行。 这些 web 框架帮助你使用 Python 创建服务器端代码（后台代码），即运行在你服务器上的代码，相对于运行在用户的设备、浏览器上（前端代码）。如果你不熟悉后端代码和前端代码的区别，请参考下面的脚注。 但是等一下，为什么我需要一个 web 框架呢？ 那是因为 web 框架在构建共同后端逻辑非常方便，包括映射不同的 URLS 到 Python 代码块，处理数据库和产生用户在浏览器中看到的 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/what-can-you-do-with-python-the-3-main-applications/</link>
                <guid isPermaLink="false">5f5f2c28cd07b005bfb5b1fd</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web开发 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 机器学习 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ FengJiaJun ]]>
                </dc:creator>
                <pubDate>Mon, 14 Sep 2020 08:50:28 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/04/photo-1580927752452-89d86da3fa0a.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>如果你想学习 Python，或者如果你最近开始学习 Python，你也许会这么问自己：</p><p><strong>“我到底可以使用 Python 做什么？”</strong></p><p>这是一个棘手的问题去回答，因为已经有许多 Python 的程序。</p><p>但是随着时间的迁移，我发现 Python 有三个主要的流行应用程序：</p><ul><li>Web 开发</li><li>数据科学 - 包括机器学习，数据分析和数据可视化</li><li>脚本编写</li></ul><p>我们依次讨论它们。</p><h3 id="web-"><strong>Web开发</strong></h3><p>基于 Python 的 web 框架（比如 <strong>Django</strong> 和 <strong>Flask</strong> ）最近变得非常流行。</p><p>这些 web 框架帮助你使用 Python 创建服务器端代码（后台代码），即运行在你服务器上的代码，相对于运行在用户的设备、浏览器上（前端代码）。如果你不熟悉后端代码和前端代码的区别，请参考下面的脚注。</p><h4 id="-web-"><strong>但是等一下，为什么我需要一个 web 框架呢？</strong></h4><p>那是因为 web 框架在构建共同后端逻辑非常方便，包括映射不同的 URLS 到 Python 代码块，处理数据库和产生用户在浏览器中看到的 HTML 文件。</p><h4 id="-web--1"><strong>我应该用哪一个 web 框架？</strong></h4><p>Django 和 Flask 是两个最受欢迎的 Python web 框架。如果你刚刚入门 Python,我建议你使用他们其一。</p><h4 id="django-flask-"><strong>Django 和 Flask 之间的区别是什么？</strong></h4><p>这里有一篇 Gareth Dwyer 编写的关于这个问题的<a href="https://www.codementor.io/garethdwyer/flask-vs-django-why-flask-might-be-better-4xs7mdf8v" rel="nofollow">出色文章</a>，所以我在这里引用它：</p><p><strong><em>&lt;开始引用&gt;</em></strong></p><p>主要对比：</p><ul><li>Flask 提供了简单性，灵活性和细粒度的控制。It is unopinionated （它让你可以决定你想要实现的东西）。</li><li>Django 提供全方位的体验：你可以开箱即用式地获得管理面板、数据库接口、<a href="https://stackoverflow.com/questions/1279613/what-is-an-orm-and-where-can-i-learn-more-about-it" rel="nofollow">ORM [对象关系映射]</a>以及目录结构。</li></ul><p>你可能应该选择：</p><ul><li>Flask，如果你专注于体验和学习机会，或者如果你想要去控制更多使用的组件（比如你想要使用哪些数据库和你想要如何与它们交互）。</li><li>Django,如果你专注于最终产品。特别是如果你正在开发一个简单易用的应用比如新闻网站、电子商店、博客，并且你想要有一种简单，显而易见的方法去搭建这个应用。</li></ul><p><strong><em>&lt;结束引用&gt;</em></strong></p><p>换一种说法，如果你是一个初学者，Flask 可能是更好的选择。因为它需要处理的组件更少。同时，如果你想要更多的定制化，Flask 是更好的选择。</p><p>在另一方面，如果你正在寻找简单易用的方式构建程序，Django 将会让你更快完成。</p><p>现在如果你想学习 Django，我推荐你一本书《Django for Beginners》。你可以从<a href="http://csdojo.io/dj" rel="nofollow">这里</a>找到它。</p><p>你也可以找到免费的章节案例在<a href="https://djangoforbeginners.com/" rel="nofollow">这本书里</a>。</p><p>好的，让我们开始下一个的话题。</p><h3 id="-"><strong>数据科学 - 包括机器学习，数据分析和数据可视化</strong></h3><h4 id="--1"><strong>首先，回顾下机器学习是什么 。</strong></h4><p>我认为最好的方式解释什么是机器学习，就是给你一个简单的样例。</p><p>假如你想要开发一个程序去自动检测数图片里面的内容。</p><p>你想要你的程序去识别这是一只狗。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2020/09/image-3.png" class="kg-image" alt="image-3" width="600" height="400" loading="lazy"><figcaption>图 1</figcaption></figure><p>另一张图片，你想要你的程序去识别这是一张桌子。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2020/09/image-2.png" class="kg-image" alt="image-2" width="600" height="400" loading="lazy"><figcaption>图 2</figcaption></figure><p>你或许会说，好的，我可以写一些代码去完成这个功能。比如，如果图片中有很多白色像素，那么我们可以说这里是一只狗。</p><p>或者，你可以找出如何检测图片中的边缘。然后，你可能会说，如果有很多直边，那就是一张桌子。</p><p>然而，这种方法很快就会变得棘手。如果图片里有一只白狗没有棕色毛发呢？如果图片只展示桌子的圆形部分呢？</p><p><strong>这就是机器学习的用武之地。</strong></p><p>机器学习通常实现一种算法，可以自动检测给定的输入模型。</p><p>你可以传入1000张狗的图片和1000张桌子的图片到机器学习算法中。之后算法将会去学习狗和桌子之间的差异。之后你传入一张新的狗或者桌子的图片，算法将能够识别出它属于哪一个。</p><p>我认为这个机器学习算法就是某种与婴儿学习新鲜事物具有相似性。婴儿是如何学习到一个事物是狗还是桌子呢？可能是从一堆样例中学习到的。</p><p>你应该不会去明确告诉一个婴儿：“如果某个动物毛茸茸的并且有着浅棕色毛发，那么它就很可能是一只狗。”；</p><p>你可能会这么说：“这是一只狗，这也是一只狗。并且这是一张桌子，这也是一张桌子。”</p><p>机器学习算法的工作方式类似这样。</p><p>你可以将相同的想方法应用于：</p><ul><li>推荐系统（例如 YouTube、Amazon、Netflix）</li><li>人脸识别</li><li>语音识别</li></ul><p>以及其他应用程序。</p><p>你可能听过的流行的机器学习算法包括：</p><ul><li>神经网络</li><li>深度学习</li><li>支持向量机</li><li>随机森林</li></ul><p>你可以使用上门任意一种算法解决我之前解释的图片标记问题。</p><h4 id="-python"><strong>适用于机器学习的 Python</strong></h4><p>有很多 Python 语言的机器学习类库和框架。</p><p>两个最流行的框架是 <strong>scikit-learn</strong> 和 <strong>TensorFlow</strong>。</p><ul><li>scikit-learn 内置了一些更加流行的机器学习算法。我在上面提到了其中一些。</li><li>TensorFlow 更像是一个低级别类库，它可以让你自定义机器学习算法。</li></ul><p>如果你刚刚开始进行机器学习的项目，我将会建议你首先使用 scikit-learn。如果你开始遇到效率问题，那么我将会建议你开始研究 TensorFlow。</p><h4 id="--2"><strong>我应该如何学习机器学习？</strong></h4><p>为了学习机器学习的基础，我将会推荐<a href="https://www.coursera.org/learn/machine-learning" rel="nofollow">斯坦福大学的</a>或者<a href="https://work.caltech.edu/telecourse.html" rel="nofollow">加州理工学院的</a>机器学习课程。</p><p>请注意，你需要微积分和线性代数的基本知识才能理解这些课程中的某些资料。</p><p>之后我将使用 <a href="https://www.kaggle.com/" rel="nofollow">Kaggle</a> 去训练你从其中一门课程中学习到的知识。这是一个人们可以对于一个特定问题的最好的机器学习算法进行竞赛的网站。他们也为初学者提供不错的课程。</p><h3 id="--3"><strong>关于数据分析和数据可视化呢?</strong></h3><p>为了帮助你理解这些知识点是什么，让我给你几个简单案例。</p><p>假设你在一家在线销售某些产品的公司工作。</p><p>作为数据分析师，你可能回绘制一个条形图。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/1f326ac69b63959b26cd02248d86dd9225bf2d20/68747470733a2f2f63646e2d6d656469612d312e66726565636f646563616d702e6f72672f696d616765732f312a3632542d727468654b506568675a64505445704b77772e706e67" class="kg-image" alt="68747470733a2f2f63646e2d6d656469612d312e66726565636f646563616d702e6f72672f696d616765732f312a3632542d727468654b506568675a64505445704b77772e706e67" width="600" height="400" loading="lazy"><figcaption>条形图 1 - Python 生成的</figcaption></figure><p>从这幅图我们可以得知，在这个特定的星期日，男性购买了400多种产品，女性购买了350多种产品。</p><p>作为数据分析师，你可能会针对这种差异提出一些可能的解释。</p><p>一个明显的解释是这个产品对于男性更具有吸引力。另一个可能的解释是样本数量太小了，并且这种差异是具有偶然性的。还有另一个可能的解释是，由于某种原因男人倾向于只在星期日购买更多该产品。</p><p>为了了解这些解释哪些事正确的，你可能会绘制另一些图表比如下面这个。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://camo.githubusercontent.com/a72faf983bef39cdbddcee1f70053286c8695bb0/68747470733a2f2f63646e2d6d656469612d312e66726565636f646563616d702e6f72672f696d616765732f312a56674e66714b3558784e664878783653345646436a512e706e67" class="kg-image" alt="68747470733a2f2f63646e2d6d656469612d312e66726565636f646563616d702e6f72672f696d616765732f312a56674e66714b3558784e664878783653345646436a512e706e67" width="600" height="400" loading="lazy"><figcaption>线形图 1 - Python 生成的</figcaption></figure><p>我们将查看整整一周的数据，而不是仅显示周日的数据。正如你说看到的，从这个线形图，我们可以看到这种差异在不同的日子是相当一致的。</p><p>从这个小分析，你也许会得出如下结论，关于这种差异的最令人信服的解释是，相较于女性，该产品更受男性欢迎。</p><p>另一方面，如果你看到如下另一个图表呢？</p><figure class="kg-card kg-image-card"><img src="https://camo.githubusercontent.com/79d1e7e8e2eeee29188424b27abf5da11747e25f/68747470733a2f2f63646e2d6d656469612d312e66726565636f646563616d702e6f72672f696d616765732f312a644d70755f66642d54484e58524a68484971324f33672e706e67" class="kg-image" alt="68747470733a2f2f63646e2d6d656469612d312e66726565636f646563616d702e6f72672f696d616765732f312a644d70755f66642d54484e58524a68484971324f33672e706e67" width="600" height="400" loading="lazy"></figure><p>线形图2 - 也是由Python生成的</p><p>那么，你怎么解释周日的差异？</p><p>你也许会说，男人可能出于某个原因倾向于在周日购买这个产品。或者，这也许只是一种巧合，男人购买更多产品在周日。</p><p>因此，这是数据分析在现实世界中的简化示例。</p><p>我在 Google 和 Microsoft 工作时所做的数据分析工作与该示例非常相似，只是更为复杂。我实际上在 Google 公司使用 Python 去处理这种分析问题，然而在 Microsoft 公司我使用 JavaScript 技术。</p><p>我在两家公司都是用SQL从数据库中抽取数据。之后，我将会使用 Python 和 Matplotlib （在 Google 公司）或者 JavaScript和D3.js（在 Microsoft 公司）去可视化和分析数据。</p><h4 id="-python-"><strong>使用Python做数据分析和可视化</strong></h4><p>最流行的数据可视化类库是 <a href="https://matplotlib.org/" rel="nofollow">Matplotlib</a>。</p><p>这是一个很好的入门库，因为：</p><ul><li>入门简单</li><li>其他一些库，例如 [seaborn] <a href="https://seaborn.pydata.org/" rel="nofollow">9</a> 也以此为基础。因此，学习 Matplotlib 将有助于你今后学习这些其他库。</li></ul><p><strong>我应该怎么学习使用 Python 进行数据分析和可视化？</strong></p><p>你首先应该学习数据分析和可视化的基础知识。当我在网上寻找好的资源时，找不到任何资源。因此，我最终制作了有关此话题的 YouTube 视频：</p><p>我还最终完成了<a href="https://goo.gl/fZ5oVX">关于 Pluralsight 的主题的完整课程</a>，你可以通过注册 10 天的免费试用期来免费获取。</p><p>我建议这两种方式都采取。</p><p>在学习了数据分析和可视化的基础知识之后，从 Coursera 和 Khan Academy 等网站学习统计基础知识也将有所帮助。</p><h3 id="--4"><strong>脚本编写</strong></h3><h4 id="--5"><strong>什么是脚本编写？</strong></h4><p>脚本编写通常指的是编写自动化简单任务的小型程序。</p><p>所以，根据我个人经验给你一个参考样例。</p><p>我曾经在一家日本的拥有邮件维护系统的公司工作过。我们用这个系统来回答客户通过电子邮件发送给我们的问题。</p><p>当我在那工作的时候，我的任务是计算包含某些关键词的邮件个数，以便我们可以分析我们收到的邮件。</p><p>我们本来可以手动完成，但是我编写了一个简单的程序/简单的脚本去自动完成该任务。</p><p>实际上我们使用 Ruby 作为程序后端，但是 Python 也可以作为这个任务的不错的语言。Python 很适合这种任务，主要是因为它具有相对简单的语法并且易于编写。</p><h3 id="--6"><strong>关于嵌入式应用呢？</strong></h3><p>我并不是嵌入式应用专家，但是我知道 Python 可与 Raspberry Pi 一起使用。Raspberry Pi 似乎在硬件爱好者中很流行。</p><h3 id="--7"><strong>关于游戏编程呢？</strong></h3><p>你可以使用 PyGame 的库来开发游戏，但它不是最受欢迎的游戏引擎。你可以使用它来构建一个喜好的项目，但是如果你想正式学习游戏开发，我个人不会建议选择它。</p><p>相反，我建议使用 Unity C＃（最受欢迎的游戏引擎之一）入门。你可以使用它构建很多平台支持的游戏，包括 Mac、Windows、iOS 以及 Android。</p><h3 id="--8"><strong>关于桌面应用呢？</strong></h3><p>你可以使用功能 Python 的 Tkinter 模块，但是它并不是最受欢迎的选择。</p><p>取而代之的是，似乎 Java，C＃和C ++ 之类的语言更受欢迎。</p><p>最近一些公司也开始使用 JavaScript 来创建桌面应用。</p><p><a href="https://slack.engineering/building-hybrid-applications-with-electron-dc67686de5fb" rel="nofollow">例如，Slack 公司的桌面应用是由 Electron 构建的</a>。Electron 允许你使用 JavaScript 构建桌面应用。</p><p>对于我个人而言，如果我正在构建一个桌面应用，我将会选择使用 JavaScript 语言。如果你使用 JavaScript 的话，它可以让你重用Web版本中的某些代码。</p><p>然后，我并不是一个桌面应用的专家，所以请给我留言，告诉我你支持还是反对我的观点。</p><h3 id="python-3-python-2-"><strong>Python 3 还是 Python 2？</strong></h3><p>我建议使用 Python 3，因为它是较新版本，并且是目前最受欢迎的选择。</p><h3 id="--9"><strong>脚注：关于后端代码与前端代码的注释（以防你不熟悉这些术语）：</strong></h3><p>假设你想制作类似 Instagram 的产品。</p><p>你需要去创建你想要支持的每一个类型设备的前端代码。</p><p>你或许会使用如下技术，比如：</p><ul><li>Swift for iOS</li><li>Java for Android</li><li>JavaScript for web browsers</li></ul><p>每组代码将在各自类型的设备/浏览器上运行。这将是一组用于确定应用程序的布局、单击时的按钮样式等的代码。</p><p>然而，你仍然需要能够存储用户的信息和图片。你将会想要存储这些信息到你的服务器上，而不仅仅是存储到你的用户的设备上，以至于可以让每个用户的关注者可以访问到他/她的图片。</p><p>这就是后端代码/服务器端代码出现的地方。你将会需要写一些后台代码去完成下面的事情：</p><ul><li>追踪谁关注了谁</li><li>压缩照片以免占用太多存储空间</li><li>在 <em>discovery</em> 功能中向每个用户推荐照片和新用户</li></ul><p>所以，这就是前端和后台代码之间的差异。</p><p>顺便说一下，Python 并不是编写后端/服务器端代码的唯一的选择。还有很多流行的选择，包括基于 JavaScript 的 Node.js。</p><p>喜欢这篇文章吗？ 然后，你可能也喜欢我的 YouTube 频道。</p><p>我在 YouTube 有一个编程教育频道，叫作 CS Dojo，有 440,000 多名订阅者，在这里我可以创作更多类似本文的内容。</p><p>非常感谢你阅读我的文章！</p><p>原文：<a href="https://www.freecodecamp.org/news/what-can-you-do-with-python-the-3-main-applications-518db9a68a78/">What exactly can you do with Python? Here are Python's 3 main applications</a>，作者：YK Sugi</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
