<jupyter_start><jupyter_text>1 - 机器学习基础```    描述：机器学习基础    作者：Chenyyx    时间：2019-12-23``````目录：    1 - 机器学习是什么？    2 - 为什么使用机器学习？    3 - 机器学习的类型    4 - 小实例    5 - 总结``` 1 - 机器学习是什么？机器学习是计算机编程的科学，它使得计算机可以从数据中学习。一个更加面向工程的定义：如果一个计算机在任务 T 上的性能由 P 这个指标来度量，并且随着经验 E 的提升而提升，那么我们就可以说这个计算机程序在任务 T 上使用 P 度量指标从经验 E 中学习。最简单的一个小例子，您的垃圾邮件过滤器就是一个机器学习程序，可以通过给出的垃圾邮件样本以及常规邮件样本来学习标记垃圾邮件。在这种情况下，任务 T 是为新的电子邮件标记垃圾邮件，经验 E 是训练数据集，并且需要定义性能度量 P。例如，您可以使用正确分类的电子邮件的比例。这种特殊的性能度量被称为准确性，经常用于分类任务。 2 - 为什么使用机器学习？ - 传统方法传统方法，我们会针对每一个模式写一个检测算法，如果检测到这些模式中的一些，我们的程序才会把目标检测出来。由于每次遇到的问题不会是很小的问题，我们的程序会发展为一个复杂的规则很长的列表，这在后期往往是很难进行维护的。![传统方法](../../imgs/1_1.png)  - 机器学习方法相比之下，基于机器学习所编写的程序会更短，更加容易维护，而且可能会更加准确。![机器学习方法](../../imgs/1_2.png)就拿垃圾邮件分类任务举例来说，如果垃圾邮件发送者将垃圾邮件之前的规则调整一下，比如将 `4` 换成 `For` 。我们的传统方法则需要更新来标记 `For` 电子邮件，这样我们就需要不断写入新的规则。相比之下，基于机器学习技术的垃圾邮件过滤器会自动注意到 `For` 在用户标记的垃圾邮件中变得异常频繁，并且在没有我们干预的情况下开始对其进行标记。![自动适应变化](../../imgs/1_3.png)机器学习还对传统方法过于复杂或者没有已知算法的问题有些优势。例如，考虑语音识别：假如你想简单地开始写一个能区分单词 “one” 和 “two” 的程序。你可能会注意到 “two” 这个单词开头是一个高音 （“T”），所以你可以硬编码一个测量高音强度的算法，并用它来区分 “one” 和 “two” 。很明显，这种技术不会在嘈杂的环境和数十种语言中扩展成千上万非常不同的人所说的话。最好的解决方案（至少是现在最好的）是编写一个自学习的算法，给出每个单词的许多示例记录。最后，机器学习可以帮助人类学习（图 1-4）：可以检查 ML 算法，看看他们已经学到了什么（尽管对于一些算法来说这可能很困难）。例如，一旦垃圾邮件过滤器已经接受足够的垃圾邮件训练，就可以很容易地检查垃圾邮件过滤器是否能够预测垃圾邮件的最佳预测效果。有时候，这将揭示出未知的相关性或新的趋势，从而导致对问题有更好的理解。应用 ML 技术挖掘大量的数据可以帮助发现那些并不明显的模式。这被称为数据挖掘。![帮助人类学习](../../imgs/1_4.png)总结一下，机器学习对于下面的问题有较好的表现： - 现有解决方案需要大量手动调整或长规则列表的问题：机器学习算法通常可以简化代码并且得到更好的效果。 - 使用传统的方法没有好的解决方案的复杂的问题：最好的机器学习技术可以找到一个解决方案。 - 不是很稳定，时常波动的环境：机器学习系统可以适应新的数据。 - 需要深入了解复杂的问题和数据量比较大的问题。 3 - 机器学习系统的类型 3.1 - 有监督学习在有监督学习中，提供给算法的训练数据包括其所需的分类或解决方案，称之为 **label(标签)** 。典型的监督学习任务是分类，垃圾邮件过滤器就是一个很好的例子：它与许多示例电子邮件和它们的类（垃圾邮件和常规邮件）一起训练，并且它必须学会如何分类新的电子邮件。![分类算法](../../imgs/1_5.png)另一个典型的任务是预测一个目标数值，如给定一组特征（里程，年限，品牌等），来预测一辆汽车的价格，称为预测。这种任务被称为回归。![回归算法](../../imgs/1_6.png)下面列出了一些比较重要的监督学习算法： - k-Nearest Neighbors（k近邻） - Linear Regression（线性回归） - Logistic Regression（Logistic 回归） - Support Vector Machines (SVMs)（支持向量机） - Decision Trees and Random Forests（决策树和随机森林） - Neural network（神经网络） 3.2 - 无监督学习在无监督学习中，训练数据是没有 label（标签）的。![](../../imgs/1_7.png)下面列出了一些重要的无监督学习算法： - 聚类     - k-Means（k均值）     - Hierarchical Cluster Analysis (HCA)（分层聚类分析）     - Expectation Maximization（期望最大化） - 可视化和降维     - Principal Component Analysis (PCA)（主成分分析）     - Kernel PCA— Locally-Linear Embedding (LLE)（内核 PCA - 局部线性嵌入）     - t-distributed Stochastic Neighbor Embedding (t-SNE)（t 分布的随机相邻嵌入） - 关联规则学习     - Apriori     - Eclat![](../../imgs/1_8.png) 3.3 - 半监督学习还有一些算法可以处理部分标记的训练数据，通常是很多未标记的数据和一些标记的数据，这被称为半监督学习。![](../../imgs/1_9.png)大多数半监督学习算法是无监督和监督算法的组合。以无监督的方式训练模型，然后使用监督学习技术对整个系统进行微调。 3.4 - 强化学习在强化学习中，一个被称为 agent 的学习系统可以观察环境，选择和执行行动，并获取回报（或负面回报的惩罚）。然后，它必须自己学习什么是最好的策略，称为 policy，以获取最大的回报。一项 policy 规定了 agent 在特定情况下应该选择的行动。![](../../imgs/1_10.png) 4 - 小实例下面举个小例子，使用 scikit-learn 中的 k近邻算法 进行分类。<jupyter_code>from sklearn.neighbors import (NeighborhoodComponentsAnalysis, KNeighborsClassifier)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.7, random_state=42)
nca = NeighborhoodComponentsAnalysis(random_state=42)
knn = KNeighborsClassifier(n_neighbors=3)
nca_pipe = Pipeline([('nca', nca), ('knn', knn)])
nca_pipe.fit(X_train, y_train)
print(nca_pipe.score(X_test, y_test))<jupyter_output>0.9619047619047619
{'fraction_non_alphanumeric': 0.13133372160745485, 'fraction_numerical': 0.021549213744903904, 'mean_word_length': 7.198090692124105, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '131542', 'license': 'Apache-2.0', 'n_tokens_mistral': 2617, 'n_tokens_neox': 2936, 'n_words': 180, 'path': 'tutorials/1_basis/1_basis.ipynb', 'repo_name': 'chenyaoysu/PyTorch_Learning', 'size': '3434'}