lxinghua

博客园 首页 新随笔 联系 订阅 管理

机器学习初识

人工智能(Artficial Inteliigence, AI): 是指由人工制造出来的系统所变现出来的智能。类似于电影中的终结者、阿尔法狗这类的具有一定和人类智慧同样本质的一类智能的物体;

机器学习(Machine Learning, ML):是人工智能的一个分支,是实现人工智能的一个途径,即以机器学习为手段解决人工智能中的问题。让一个计算机程序针对某一个特定任务,从经验中学习,并且越来越好;

深度学习(Deep Learning, DL):是机器学习拉出的分支。是机器学习算法中的一种算法,一种实现机器学习的技术和学习方法。

机器学习常规分类:

根据训练期间接受的监督数量和监督类型,可以将机器学习系统分为以下四个主要类型:有监督学习、五监督学习、半监督学习和强化学习。

一、 有监督学习

在有监督学习中,提供给算法的包含所需解决方案的训练集称为标签,其训练集包含特征和目标,且目标位人为标注的。

监督学习又可细分为如下三类:

回归(Regression):预测一个值,如预测降雨量、房价等,较基础的算法有:Linear Regression
分类(Classification):预测一个标签,如预测“生病”或“健康”,图片上是哪种动物等,较基础的算法有:Logistic Regression、Naive Bayes、K-Nearest Neighbors(KNN)、支持向量机、决策树
集成(Ensembling)也可以归类为监督学习的一种,它将多个单独较弱的机器学习模型的预测结合起来,以产生更准确的预测,较基础的算法有Bagging with Random Forests、Boosting with XGBoost

二、无监督学习

顾名思义,无监督学习的训练数据都是未经过标记的,系统会在没有“老师”的情况下进行学习。有训练集,有输入和输出,但训练集没有人为标注。

非监督学习又可细分为如下三类:

关联(Association):发现集合中项目同时出现的概率,如通过分析超市购物篮,发现啤酒总是和尿片一起购买(啤酒与尿片的故事),较基础的算法有:Apriori
聚类(Clustering):对数据进行分组,以便组内对象比组间对象更相似,较基础的算法有:K-Means
降维(Dimensionality Reduction):减少数据集的变量数量,同时保证重要的信息不被丢失。降维可以通过特征提取方法和特征选择方法来实现,特征提取是执行从高维空间到低维空间的转换,特征选择是选择原始变量的子集,较基础的算法有:PCA

无监督学习算法有:聚类算法;k-均值算法;DBCSAN;分层聚类分析(HCA);异常检测和新颖性检测;单类SVM; 孤立森林; 可视化和降维;主成分分析(PCA);核主成分分析;局部线性嵌入(LLE);t-分布随机近邻嵌入(t-SNE);关联规则学习;Apriori;Eclat。

三、半监督学习

由于通常给数据做标记是非常耗时和昂贵的,往往会有很多未标记的数据而很少有已标记的数据。有些算法可以处理标记的数据。这被称为半监督学习。

四、强化学习

强化学习 则是一个非常与众不同的“巨兽”。它的学习系统能够观察环境,做出选择,执行操作,并获得回报。所以它必须自行学习什么是最好的策略,从而随着时间的推移获得最大的回报。策略代表智能体在特定情况下应该选择的动作。

五、批量学习和在线学习

基于机器学习系统是否可以从传入的数据流中进行增量学习。

批量学习,系统无法进行增量学习,必须使用所有可用数据进行训练。通常是离线完成的,离线学习就是先训练系统,然后将其投入生产环境,这时学习过程停止,它只是将其所学到的应用出来。

在线学习,可以循序渐进低给系统提供训练数据,逐步积累学习成果。在线学习系统的一个重要参数是其使用不断变化的数据的速度,这就是所谓的学习率。

六、基于实例的学习和基于模型的学习

基于实例的学习,就是简单的死记硬背。系统用心学习示例,然后通过使用相似度度量来比较新实例和已经学习的实例,从而泛化新实例。

基于模型学习,从一组示例集中泛化的另一种方法是构建这些示例的模型,然后使用该模型进行预测。

七、机器学习的主要挑战

1. 训练数据的数量不足:大量的数据;

2. 训练数据不具代表性:训练数据一定要非常具有代表性;

3. 低质量数据:训练集中的错误、异常值、噪音等都需要提请进行清理;

4. 无关特征:垃圾入,垃圾出。 所以训练集需要选择最有用的特征进行训练,将现有特征进行整合,产生更有用的特征;

5. 过拟合训练数据:深度神经网络的复杂模型可以检测到数据中的微小模式,但是如果训练集本身是有噪声的,或者数据集太小(引入了采样噪声),那么很可能会导致模型检测噪声本身的模式。导致模型过拟合。

6. 欠拟合训练数据: 欠拟合与过拟合正好相反,就是模型太过简单,缺少一些特征值;

八、测试与验证

在建立模型时,通常将数据源分割成两部分,训练集和测试集。用训练集的数据来训练模型,然后用测试集的数据来测试模型。根据自己数据量的大小,进行分割,一般8:2。

机器学习步骤

1. 观察大局;2. 获得数据;3. 从数据探索和可视化中获得洞见;4. 机器学习算法的数据准备; 5. 选择并训练模型; 6. 微调模型; 7. 展示解决方案; 8. 启动、监控和维护系统。

机器学习常用的十大算法

  • 线性回归算法 Linear Regression
  • 逻辑回归算法 Logistic Regression
  • 朴素贝叶斯算法 Naive Bayes
  • 最近邻居/k-近邻算法 (K-Nearest Neighbors,KNN)
  • 支持向量机算法 (Support Vector Machine,SVM)
  • 决策树算法 Decision Tree
  • 随机森林算法 Random Forest
  • k-平均算法 K-Means
  • 降维算法 Dimensional Reduction
  • 梯度增强算法 Gradient Boosting

1. 线性回归算法 Linear Regression

回归分析(Regression Analysis)是统计学的数据分析方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测其它变量的变化情况。它为变量分配最佳权重,以创建一条直线或一个平面或更高维的超平面,使得预测值和真实值之间的误差最小化。

线性回归算法(Linear Regression)的建模过程就是使用数据点来寻找最佳拟合线。公式,y = mx + c,其中 y 是因变量,x 是自变量,利用给定的数据集求 m 和 c 的值。

线性回归又分为两种类型,即 简单线性回归(simple linear regression),只有 1 个自变量;*多变量回归(multiple regression),至少两组以上自变量。

下面是一个线性回归示例:基于 Python scikit-learn 工具包描述。

优点:实现简单,计算简单;

缺点:不能拟合非线性数据;

2. 逻辑回归算法 Logistic Regression

虽然写着回归,但实际上是一种二分类算法。它将数据拟合到logit函数中,所以称为logit回归。简单来说就是基于一组给定的变量,用logistic function来预测这个事件的概率,给出一个介于0和1之间的输出。

逻辑回归算法(Logistic Regression)一般用于需要明确输出的场景,如某些事件的发生(预测是否会发生降雨)。通常,逻辑回归使用某种函数将概率值压缩到某一特定范围。

例如,Sigmoid 函数(S 函数)是一种具有 S 形曲线、用于二元分类的函数。它将发生某事件的概率值转换为 0, 1 的范围表示。

Y = E ^(b0+b1 x)/(1 + E ^(b0+b1 x ))

以上是一个简单的逻辑回归方程,B0,B1是常数。这些常数值将被计算获得,以确保预测值和实际值之间的误差最小。

 

优点:

1. 实现简单

2. 分类时计算量非常小,速度很快,存储资源低;

缺点:

1. 容易欠拟合,一般准确度不太高

2. 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;

3. 朴素贝叶斯算法 Naive Bayes

朴素贝叶斯算法(Naive Bayes)基于概率论的贝叶斯定理,应用非常广泛,从文本分类、垃圾邮件过滤器、医疗诊断等等。朴素贝叶斯是一种基于贝叶斯定理的分类方法,它会假设一个类中的某个特征与其他特征无关。这个模型不仅非常简单,而且比许多高度复杂的分类方法表现得更好。

朴素贝叶斯适用于特征之间的相互独立的场景,例如利用花瓣的长度和宽度来预测花的类型。“朴素”的内涵可以理解为特征和特征之间独立性强。

与朴素贝叶斯算法密切相关的一个概念是最大似然估计(Maximum likelihood estimation),历史上大部分的最大似然估计理论也都是在贝叶斯统计中得到大发展。例如,建立人口身高模型,很难有人力与物力去统计全国每个人的身高,但是可以通过采样,获取部分人的身高,然后通过最大似然估计来获取分布的均值与方差。

Naive Bayes is called naive because it assumes that each input variable is independent.

 

优点:对小规模的数据表现很好,适合多分类任务,适合增量式训练。

缺点:对输入数据的表达形式很敏感。

4 最近邻居/k-近邻算法 (K-Nearest Neighbors,KNN)

KNN算法是一种基于实例的学习,或者是局部近似和将所有计算推迟到分类之后的惰性学习。用最近的邻居(k)来预测未知数据点。k 值是预测精度的一个关键因素,无论是分类还是回归,衡量邻居的权重都非常有用,较近邻居的权重比较远邻居的权重大。

这是用于分类和回归的机器学习算法(主要用于分类)。它考虑了不同的质心,并使用欧几里得函数来比较距离。接着分析结果并将每个点分类到组中,以优化它,使其与所有最接近的点一起放置。它使用k个最近邻的多数票对数据进行分类预测。

 

优点:

1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;

2. 可用于非线性分类;

3. 训练时间复杂度为O(n);

4. 准确度高,对数据没有假设,对outlier不敏感;

缺点:

1. 计算量大,需要对数据进行规范化处理,使每个数据点都在相同的范围。;

2. 样本不平衡问题,对数据的局部结构非常敏感(即有些类别的样本数量很多,而其它样本的数量很少);

3. 需要大量的内存;

延伸:KNN 的一个缺点是依赖于整个训练数据集,学习向量量化(Learning Vector Quantization,LVQ)是一种监督学习的人神经网络算法,允许你选择训练实例。LVQ 由数据驱动,搜索距离它最近的两个神经元,对于同类神经元采取拉拢,异类神经元采取排斥,最终得到数据的分布模式。如果基于 KNN 可以获得较好的数据集分类效果,利用 LVQ 可以减少存储训练数据集存储规模。典型的学习矢量量化算法有LVQ1、LVQ2和LVQ3,尤以LVQ2的应用最为广泛。

5. 支持向量机算法(Support Vector Machine,SVM)

支持向量机/网络算法(SVM)属于分类型算法。SVM模型将实例表示为空间中的点,将使用一条直线分隔数据点。需要注意的是,支持向量机需要对输入数据进行完全标记,仅直接适用于两类任务,应用将多类任务需要减少到几个二元问题。

它将数据映射为空间中的点,使得不同类别的点可以被尽可能宽的间隔分隔开,对于待预测类别的数据,先将其映射至同一空间,并根据它落在间隔的哪一侧来得到对应的类别。

 

优点:

1. 可用于线性/非线性分类,也可以用于回归;

2. 低泛化误差;

3. 容易解释;

4. 计算复杂度较低;

缺点:

1. 对参数和核函数的选择比较敏感;

2. 原始的SVM只比较擅长处理二分类问题;

6. 决策树算法 Decision Tree

决策树(Decision tree)是一种特殊的树结构,由一个决策图和可能的结果(例如成本和风险)组成,用来辅助决策。机器学习中,决策树是一个预测模型,树中每个节点表示某个对象,而每个分叉路径则代表某个可能的属性值,而每个叶节点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,通常该算法用于解决分类问题。

一个决策树包含三种类型的节点:

决策节点:通常用矩形框来表示

机会节点:通常用圆圈来表示

终结点:通常用三角形来表示

简单决策树算法案例,确定人群中谁喜欢使用信用卡。考虑人群的年龄和婚姻状况,如果年龄在30岁或是已婚,人们更倾向于选择信用卡,反之则更少。

通过确定合适的属性来定义更多的类别,可以进一步扩展此决策树。在这个例子中,如果一个人结婚了,他超过30岁,他们更有可能拥有信用卡(100% 偏好)。测试数据用于生成决策树。

 

注意:对于那些各类别样本数量不一致的数据,在决策树当中信息增益的结果偏向于那些具有更多数值的特征。

优点:计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;

缺点:容易过拟合(后续出现了随机森林,减小了过拟合现象)。

7. 随机森林算法 Random Forest

随机森林算法(Random Forest)的名称由 1995 年由贝尔实验室提出的random decision forests 而来,正如它的名字所说的那样,随机森林可以看作一个决策树的集合。

随机森林中每棵决策树估计一个分类,这个过程称为“投票(vote)”。理想情况下,我们根据每棵决策树的每个投票,选择最多投票的分类。

 

8. k-平均算法 K-Means

k-平均算法(K-Means)是一种无监督学习算法,为聚类问题提供了一种解决方案。

K-Means 算法把 n 个点(可以是样本的一次观察或一个实例)划分到 k 个集群(cluster),使得每个点都属于离他最近的均值(即聚类中心,centroid)对应的集群。重复上述过程一直持续到重心不改变。

9. 降维算法 Dimensional Reduction

在机器学习和统计学领域,降维是指在限定条件下,降低随机变量个数,得到一组“不相关”主变量的过程,并可进一步细分为特征选择和特征提取两大方法。

一些数据集可能包含许多难以处理的变量。特别是资源丰富的情况下,系统中的数据将非常详细。在这种情况下,数据集可能包含数千个变量,其中大多数变量也可能是不必要的。在这种情况下,几乎不可能确定对我们的预测影响最大的变量。此时,我们需要使用降维算法,降维的过程中也可能需要用到其他算法,例如借用随机森林,决策树来识别最重要的变量。

它将数据映射为空间中的点,使得不同类别的点可以被尽可能宽的间隔分隔开,对于待预测类别的数据,先将其映射至同一空间,并根据它落在间隔的哪一侧来得到对应的类别。

主成分分析(Principal Component Analysis,PCA)

一种常用的降维技术,顾名思义,PCA帮助我们找出数据的主要成分,主成分基本上是线性不相关的向量,用选出的k个主成分来表示数据,来达到降维的目的。具体原理参考:如何通俗易懂地讲解什么是 PCA 主成分分析?- 马同学的回答 - 知乎,下面给出代码实现。

import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
# PCA
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
# 1. 准备数据
pca_data=load_iris()
pca_X_data=pca_data.datapca_y_data=pca_data.target
# 2. 训练模型, 维度为2
pca_model=PCA(n_components=2)  
# 3. 降维
reduced_X=pca_model.fit_transform(pca_X_data)
# 4. 可视化
red_x,red_y=[],[]blue_x,blue_y=[],[]green_x,green_y=[],[]
for i in range(len(reduced_X)): if pca_y_data[i] ==0:  red_x.append(reduced_X[i][0])  red_y.append(reduced_X[i][1]) elif pca_y_data[i]==1:  blue_x.append(reduced_X[i][0])  blue_y.append(reduced_X[i][1]) else:  green_x.append(reduced_X[i][0])  green_y.append(reduced_X[i][1])
plt.figure('PCA')plt.title('PCA')
plt.scatter(red_x,red_y,c='r')plt.scatter(blue_x,blue_y,c='b')
plt.scatter(green_x,green_y,c='g')
plt.show()

10. 梯度增强算法 Gradient Boosting

梯度增强算法(Gradient Boosting)使用多个弱算法来创建更强大的精确算法。它与使用单个估计量不同,而是使用多个估计量创建一个更稳定和更健壮的算法。梯度增强算法有几种:

XGBoost  — 使用线性和树算法

LightGBM  — 只使用基于树的算法

梯度增强算法的特点是精度较高。此外,LightGBM 算法具有令人难以置信的高性能。

Boosting 是一种试图利用大量弱分类器创建一个强分类器的集成技术。要实现 Boosting 方法,首先你需要利用训练数据构建一个模型,然后创建第二个模型(它企图修正第一个模型的误差)。直到最后模型能够对训练集进行完美地预测或加入的模型数量已达上限,我们才停止加入新的模型。

AdaBoost 是第一个为二分类问题开发的真正成功的 Boosting 算法。它是人们入门理解 Boosting 的最佳起点。当下的 Boosting 方法建立在 AdaBoost 基础之上,最著名的就是随机梯度提升机。

AdaBoost 使用浅层决策树。在创建第一棵树之后,使用该树在每个训练实例上的性能来衡量下一棵树应该对每个训练实例赋予多少权重。难以预测的训练数据权重会增大,而易于预测的实例权重会减小。模型是一个接一个依次创建的,每个模型都会更新训练实例权重,影响序列中下一棵树的学习。在构建所有的树之后,我们就可以对新的数据执行预测,并根据每棵树在训练数据上的准确率来对其性能进行加权。 



posted on 2023-06-02 12:20  興華  阅读(14)  评论(0编辑  收藏  举报