Python机器学习

一.入门
机器学习(ML):研究如何从已有的数据样本得到数据模型,并利用数据模型对未知数据进行预测。

智能包含的能力:
1.感知与认识客观事物、客观世界与自我的能力;
2.通过学习获得经验、积累知识;
3.运用知识和经验分析问题并解决问题;
4.推理、推断、决策能力;
5.行为能力。

人工智能是使用人工的方法对人的自然智能的模拟、延伸,实现某些所谓的”机器思维”。

人工智能的研究内容:机器学习,机器行为,机器思维,机器感知。

人工智能根据是否能够真正实现推理、思考等能力划分为:强人工智能和弱人工智能。

人工智能的主要学派:
1.符号主义:计算机可以处理各种符号,将知识用符号进行表示,从而进行学习,推理、决策等。
2.连接主义:从神经元模型开始研究,进而研究了神经网络模型和脑模型。
3.行为主义:智能取决于感知和行为,智能行为只能体现在现实世界中,人工智能可以像人类智能一样进化。
4.统计主义:利用统计学总结出的规律来分析客观对象,从而利用规律对未来数据进行较为准确的预测。
5.仿真主义:构造仿脑装置。

人工智能以知识为基础,研究知识表示的方法。知识表示是指使机器人懂得人类的知识,并对其进行处理,然后以一种人类能理解的方式告知人类。

机器学习专门研究计算机怎样模拟人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构,使之不断改善自身的性能。

机器学习的方法(根据数据有无标签分类):有监督学习(通过已经具有关系的输入数据和输出数据来生成函数,在将输入映射到合适的输出,如分类),半监督学习(利用有类标的数据和没有类标的数据生成合适的分类函数),无监督学习(直接对输入数据进行建模,如聚类)。

机器学习系统:
环境——>学习单元——>知识库——>执行单元——>学习单元(同前面的学习单元)

典型的机器学习方法:回归分析(和工程优化是互通的,为了求得极值,使用了多种工优的知识),分类,聚类,数据降维(这里的维度是指数据特征量的大小,即将具有几千个特征的数据压缩到若干个特征),特征抽取。

二.机器学习环境
对于初学者,安装使用Anaconda Python,熟练使用Python的直接使用Python即可。

下载安装Anaconda(官网即可)

机器学习简单实例:身高数据中,个高的标签为0,个低的标签为1,训练后,判断160和179属于哪一类。
数据准备,需要导入的模块:

import numpy as np
from sklearn import tree
from sklearn.neural_network import MLPClassifier
from sklearn import svm

X_train=[175,178,180,181,190,153,155,162,163,158]  #身高作为特征集
X_train=np.reshape(X_train,(-1,1))  #将特征集改为一列
y_train=[0,0,0,0,0,1,1,1,1,1]    #标签集

训练决策树:

clf_tree=tree.DecisionTreeClassifier()
clf_tree.fit(X_train,y_train)
print("160:",clf_tree.predict(np.reshape(160,(-1,1))))
print("179:",clf_tree.predict(np.reshape(179,(-1,1))))

训练神经网络:

clf_nn=MLPClassifier(solver='lbfgs',hidden_layer_sizes=(3,3))
clf_nn.fit(X_train,y_train)
print("160:",clf_nn.predict(np.reshape(160,(-1,1))))
print("179:",clf_nn.predict(np.reshape(179,(-1,1))))

训练向量机分类器:

clf_svm=svm.SVC(kernel='linear',gamma=2)
clf_svm.fit(X_train,y_train)
print("160:",clf_svm.predict(np.reshape(160,(-1,1))))
print("179:",clf_svm.predict(np.reshape(179,(-1,1))))

三.机器学习基础
NumPy:是一个开源的科学计算库,包括一个N维数组对象ndarray,函数库,线性代数,傅里叶变换和随机数生成函数。

在ndarray对象中,使用轴(即维度,一个轴就是一个维度)表示元素位置,轴使用从0开始的整数编号。可以将ndarray看做是与list,dict等一样的数据类型。ndarray中的元素类型必须一致。

NumPy的对数组的操作:创建数组,创建等差数列的数组,创建等比数列的数组,创建特殊数值的数组,随机数创建数组,索引数组,改变数组形状,组合数组,分割数组。

Matplotlib:是一个2D绘图库,可以生成散点图,折线图,点线图,柱状图,饼图,箱线图,直方图,子图等。
Matplotlib包含的基本元素:x轴,y轴,x轴y轴的刻度,绘图区域,hold属性(为true,允许在一幅图里面绘制多个曲线),xlim和ylim设置坐标轴范围,grid方法(添加网格线)。

Seaborn:在Matplotlib的基础上进行了更高级的API封装,使作图更容易,让复杂数据的可视化变得简单。使用Seaborn可以画出更有吸引力的图。

Seaborn主要用来显示特征之间的关系,有多种显示方法:全部特征放在一起的可视化,分类别可视化,箱线图,小提琴图,特征样本数量,特征分布的概率密度函数的可视化(单特征,双特征均可显示)等。

Numpy访问,保存二进制文件(即数组),保存为.npy、.npz文件。
Pandas访问,保存文本文件(即.csv文件),注意,将数组保存为.csv时,需要将数组转为DataFrame对象(pd.DataFrame)。
Pandas访问,保存Excel文件。
可以使用DataFrame来查看DataFrame对象的属性和值,还可以访问其中的某个、某些数据。

*四.相关的统计概念和python实现
*中位数,众数,极差,协方差,相关系数,协方差矩阵(相关概念自行查找学习)。

Numpy统计分析:使用Numpy.sort对数组进行排序;.unique去重;求和;求均值;求标准差;方差;最小、最大值;累计和,累计积等。

Pandas统计分析(几乎全部使用的是DataFrame来实现的):与NumPy类似,也有上述的功能。而且可以同时计算多个统计量。也可以统计频数。分割一位数组。聚合数据。

上述这些功能的部分使用如下:DataFrame.describe(),DataFrame.astype(),DataFrame.value_counts(),DataFrame.quantile(),DataFrame.groupby(),DataFrame.agg(),DataFrame.apply(),DataFrame.transform(),pd.pivot_table(),pd.crosstab()

五.产生加载数据集
Numpy提供了数组生成函数,生成需要的数据;当需要多个特征时,可以生成多个一维数组,然后进行横向拼接;若需要多个数据集,则将不同数据集进行纵向拼接。(hstack():横向拼接;vstack():纵向拼接。也可以用Numpy.c_()横向拼接)

使用scikit-learn生成数据集:make_blobs()生成样本,用于聚类、分类。make_classification():用于数据预处理、主成分分析等。回归样本生成器:make_regression();双圆形样本生成器make_circles();生成交错半月形数据集:make_moons().

访问scikit-learn自带的数据集:数据集包括iris数据集(记录了3种鸢尾花的4个特征);boston数据集(有13个特征)。diabetes数据集(关于糖尿病诊断的数据集)。digits数据集(用于数字手写体识别的数据集)。linnerud数据集(用于多元回归分析)。wine数据集(用于酒的多元分类和聚类)。breast_cancer数据集:用于乳腺癌的分类和聚类。

访问外部数据文件:pd.read_csv/…来读取。

六.数据预处理
一般的数据预处理包括:去除唯一属性、处理缺失值、属性编码、数据标准化和正则化、特征选择、主成分分析。

唯一属性:类似于身份证号这样的唯一标识,对于刻画自身的分布没有用,因此去除。
缺失值:因为各种原因,造成了数据库中存在缺失值,因此需要补全,如均值补全,众数补全,…即使用选取的值补全即可。
特征二值化:将数值型属性转换为布尔值(0,1)属性。
特征编码:许多数据库的字段不是数值型的,因此需要对这类属性编码,这样才能使用。
数据标准化:数据有时在特征的数值量级上会存在较大的差异,而这会影响机器学习模型的参数、准确度、精度等,因此要将原始数据按照一定比例进行转换,使其在一个小的特定区间中。
特征选择:数据库往往存在许多特征属性,但并不是所有的都可以用于机器学习模型的训练,因此要从中选出相关特征子集。
特征降维:因为数据越来越多,特征数量也随之越来越多,机器学习,数据可视化等变得异常艰难,因此需要压缩特征(包括线型降维和非线性降维)。
主成分分析(PCA):无监督线型降维的一种。
LDA:有监督线型降维的一种。
TSNE:非线性降维算法。(十分适合将高维数据降到二维/三维)

Pandas数据预处理:提供了数据合并,数据去重,缺失值补插,异常值处理,数据标准化,离散化数据

scikit_learn数据预处理:也具有上述功能。

使用sklearn对数据集进行Z-score标准化:使用sklearn.preprocessing.scale(),变为均值=0,标准差=1的数据集(实际得到的均值和标准差会有些偏差)

使用sklearn对数据集进行极差标准化:使用sklearn.preprocessing.MinMaxScaler(),sklearn.preprocessing.MaxAbsScaler()。缩放到(0,1)范围内/将每个特征值的最大绝对值转为单位大小。

使用sklearn对数据集正则化:使用sklearn.preprocessing.normalize().正则化是指将具有N个特征的数据集(即每个样本是N维向量),变为1位向量。

使用sklearn对数据集二值化:使用sklearn.preprocessing.Binarizer()。

使用sklearn对数据集进行缺失值补插:sklearn.preprocessing.Imputer()。

七.回归分析
回归分析分为:一元回归分析和多元回归分析(涉及变量的多少),线型回归分析和非线性回归分析(自变量与因变量间是否是线型关系)。

线性回归:知道最佳的拟合直线。
逻辑回归:因变量是二元变量(即0/1,是/否,真/假)。
多项式回归:自变量的指数大于1.
逐步回归:当处理多个自变量时,可以使用逐步回归。
岭回归:当数据之间存在多重共线型时,就需要使用岭回归分析。(即:对于某些数据,如矩阵等,当其中某个元素发生很小的变动时,就会导致最终计算结果的误差很大,这种数据称为病态数据,岭回归分析就是通过牺牲部分信息,降低精度来获得更符合实际的结果)

LinearRegression():一元、多元线型回归。
Ridge():岭回归。
LogisticRegression():逻辑回归。
PolynomialFeatures():多项式回归。

八.决策树学习
影响人们对问题的决策因素往往有多个,每个因素对决策的主要程度不同,如“先观察因素A,再根据A观察因素B…”,这样的过程会形成一种树状结构。因此被称为决策树学习。是一种无参监督学习方法。

信息熵:用于量化描述样本集的信息量,判断样本的不确定性(即混乱程度)。当按照某个属性划分后,若划分后的样本的信息熵下降,则这个属性比较重要。

信息增益:样本经过划分后,信息熵的变化值即为信息增益。

信息增益率:信息增益/信息熵的初值。

决策树算法:通过迭代计算针对每个属性划分后的信息增益或信息增益率来构建决策树(按照重要程度作为不同的结点,如根结点,子节点等),直到全部属性选择完毕。

使用sklearn进行决策树学习:sklearn.tree.DecisionTreeClassifier(),sklearn.tree.DecisionTreeRegressor().(分别用于分类和回归)

九.支持向量机
因为大多数实际问题是线性不可分的,所以可以将样本映射到高维空间,在高维空间找到一个最优分类超平面,从而将低维空间线性不可分问题在高维空间中实现线性分类,这种分类方法就称为支持向量机。(支持向量机是一种二元分类器)(学习策略是间隔最大化)

最优分类超平面:类间样本的差异大,从而说明类具有良好的区分性,也就是将两类样本放在空间中,在这两类样本之间找到一个超平面使得两类样本家里这个超平面最远,则这个超平面就是最优超平面。

支持向量:距离最优超平面最近的样本称为支持向量。

类间隔和分类超平面由支持向量决定,与远离类间隔的样本无关。

向高维映射的方法:例如,对于用x1,x2表示二维平面上的两个坐标,一个二次曲线方程可以写成:w1x1+w2x22+w3x2+w4x22+w5x1x2+b,令z1=x1,z2=x22,z3=x2,z4=x22,z5=x1*x2,那么就将二维中的曲线方程转为了五维中的线性方程。

核函数:在低维空间中进行内积运算,得到高维空间内积的函数称为核函数。包括线性核函数,多项式核函数,高斯核函数,sigmoid核函数。

sklearn提供了SVM模块用于支持向量机分类,支持向量机可用于监督学习、回归、异常检测。

sklearn.svm模块提供了SVC(),LinearSVC(),NuSVC()三个类,它们都能在数据集中实现二元分类和多元分类。

sklearn的模型选择模块model_selection提供了将数据集拆分为训练集和测试集的方法:train_test_split().

十.聚类分析
聚类:样本没有标签,对于这类问题,可以把没有标签的样本聚集成若干簇,使得簇内的样本尽可能相似,簇间的样本尽可能不相似,这个过程称为聚类。(聚类是无监督学习)

相似度的计算方法:欧氏距离、余弦距离、汉明距离。

聚类分析方法:划分法,层次法,基于密度的方法,基于网格的方法。

K-means算法:K表示聚类为K个簇,means代表每个聚类中数据值得均值作为该簇的中心。该算法的思想:在P个样本中随机选取K个样本作为聚类中心,而对于其他样本,根据与所选中心点的相似度或距离,将他们分配给相似度最高或距离最近的类,然后再计算每类的平均值作为新的中心点,不断重复这个过程,直到中心不再改变。

K-means算法通常使用肘部法则来选择K值。

sklearn.cluster模块提供了K-means聚类、仿射传播聚类、均值漂移聚类、谱聚类、凝聚聚类、密度聚类、高斯混合聚类,层次聚类等。

十一.集成学习
集成学习是将多个弱学习器结合,构建一个有较强性能的机器学习器的方法。其中,弱学习器称为基学习器;根据基学习器是否类型相同,可以不分为同质或异质。

增强样本多样性的方法:输入样本扰动、输入特征扰动、输出表示扰动。
集成学习的结合策略(对输出进行一定的处理):平均法、投票法、学习法。

集成学习常用的方法:Bagging,随机森林,AdaBoost,梯度树提升,XGBoost等。

Bagging方法:在原始训练集的随机子集上构建一类黑盒估计器的多个实例,然后把这些估计器的预测结果结合起来形成最终的预测结果。

随机森林:是对决策树的改进,将多个决策树结合在一起,每棵树的建立都依赖于一个独立抽取的样本,森林中的每棵树具有相同的分布,分类误差取决于每棵树的分类能力和它们间的相关性。(当有样本输入森林时,每一棵树都要对其进行分类,最终看它被归到哪个类别最多,就认为它是哪一类)

AdaBoost:该方法会改变数据的概率分布,具体而言就是提高前一轮训练中被错误分类的数据的权重,降低正确分类的数据的权重,这样可以使被错误分类的数据在下一轮得到更大的关注。然后将许多弱学习器线性组合,组合方法是:误差率小的学习器会被增大权值,误差率大的学习器会被减小权值。

Gradient Tree Boosting(梯度树提升算法):树提升算法的一种。

XGBoost:是一个优化的分布式梯度增强库。使用决策树作为基估计器,是一棵一棵往里面加树。(sklearn不自带XGBoost,需要安装xgboost模块,pip即可)

十二.神经网络学习
神经网络分为:感知器模型、多层感知机模型、前向多层神经网络、Hopfiled神经网络、动态反馈网络、自组织神经网络。

多层神经网络层数增加的好处:能够更深入的表示特征,具有更强的函数模拟能力,每一层对前一层的抽象表示更加深入。

BP神经网络算法:包含输入层,隐层,输出层。输入层的神经元个数对于特征维数,每个输入层的神经元接受一个维度的特征。
BP算法的思想:前馈过程:对每一个输入样本,从输入端开始,可以逐层计算每个神经元的输出,最终得到输出层每个神经元的输出。
误差反向传播过程:得到输出层的输出后,从输出层开始,将输出层每个结点的输出与实际样本的输出进行比较,并逐层计算这个误差,直到输入层。采取梯度下降算法,计算误差代价函数的极小值点,不断重复上述过程,不断调整权重、阈值,直到网络收敛。

概率神经网络(PNN):由输入层、模式层/隐含层、求和层/竞争层、输出层构成。

sklearn的多层感知器:MLPClassifier()

保存和加载神经网络模型:使用joblib模块,保存用joblib.dump(),加载用joblib.load()

十三.卷积神经网络
卷积:一个信号g翻转并平移后对另一个信号f的加权平均(实际上是用一个带权值的窗口,对f进行加权平均)。卷积操作实际上是滤波器的作用。f是被研究的数据系列,g看做滤波器。

填充:因为卷积操作得到的结果比原始图像的比例小,因此,如果想要得到与原始图像大小一致的结果,需要对原始图像进行填充。(如,以0进行填充)

池化:降低图像的卷积结果的维数,提高训练速度,实际上依然是卷积操作。有多种,如最大值池化,提取窗口范围内最大的元素作为这个区域的代表值。

单通道:俗称灰度图,每个像素点只能有有一个值表示颜色,它的像素值在0到255之间,0是黑色,255是白色,中间值是一些不同等级的灰色。
多通道:每个像素点都有3个值表示 ,所以就是3通道。也有4通道的图。例如RGB图片即为3通道图片。(每个通道分开单独处理)

卷积神经网络由多个卷积层过程,前面的卷积层感受野小,捕捉图像局部、细节信息;后面的卷积层感受野加大,捕获更复杂,抽象的信息。注:每一层可以有多个卷积核。

卷积层得到的结果称为特征图。

CNN有需要激励函数:例如sigmoid,relu等,但经常使用relu,而非sigmoid是因为sigmoid在输入很小时,输出接近0,输入很大时,输出接近1,因此这不利于梯度优化。

池化层的输出在进入全连接层之前,需要对输出进行正则化,即将其区间变为[0,1]。

优化器的作用:用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数。优化器的种类很多,如Adam,Adagrad等。

十四.模型评价
机器学习训练出的模型是建立在训练集上的,而训练完的模型要在测试集上测试,以评价性能(要求训练集和测试集互斥)。以测试集的测试误差近似值作为模型的泛化能力,根据这个泛化能力判别模型的好坏。

回归模型评价方法:通过如下6个指标评价模型:评价绝对误差(越小越好)、均方差(越小越好)、解释回归模型的方差得分(越小,可解释性越差)、均方误差对数(越接近0越好)、中值绝对误差(越小越好)、r2_score判定系数(同解释回归模型的方差得分)。

分类模型评价方法:因为分类模型的输出是类别标签,所以可以统计同一类样本被正确划分的概率或错误划分的概率。评价方法有:混淆矩阵、分类准确率、召回率、F1-Score、ROC曲线、交叉验证。

聚类模型评价方法:因为聚类是将相互之间相关的对象放在一个簇里面,因此通过判断簇内的相似性。评价指标有:兰德系数RI、调整兰德系数ARI、互信息MI、调整互信息AMI、V-measure评分、FMI评价、FMI评价、轮廓系数、Calinski-Harabaz指数。

十五.图像识别
图像识别是利用计算机对图像进行处理、分析和理解,以识别不同模式的目标和对象的技术,过程可分为两部分:图像处理和图像识别。

图像处理:一般指数字图像处理,目的是去除干扰、噪声,将原始图像变为适合计算机进行特征提取的形式。
图像处理的任务:图像采集、图像增强、图像复原、图像编码与压缩、图像分割。

图像采集:得到图像;
图像增强:通过图像增强,可以减少图像中的噪声,改变原始图像的亮度和色彩分布和对比度等,提升图像的清晰度、质量,使图像更加清晰,细节更明显。
图像复原:因为多种原因。可能使得图像不清晰,因此使用图像恢复获取较为清晰的图像。
图像编码与压缩:数字图像的数据量庞大,为了可以快速方便的传输图像,需要进行图像编码和压缩(改变大小)。
图像分割:按照不同特征将图像分割成多个子区域,图像分割将目标与背景进行标记,然后将目标从背景中分离出来。

聚类在图像识别中的作用:对图像的特征进行聚类,能够发现图像中相似的特征和不同的特征,便于图像分析和识别。

语音识别
语音识别是人机交互、自然语言处理的重要技术手段。对音频文件的学习需要结合频域和时域进行,WAVE API提供了WAV文件的访问方法,可以读取、修改、裁剪和拼接音频文件。傅里叶变换是分析音频文件的一个重要频域特征。

因为语言文字的读音是标准的,因此人的语音具有相对稳定性,这就构成了语音识别的物理基础。

语音识别的步骤:语音采集和标注-语音预处理-特征提取-模型选择和训练-模型评价。

语音识别需要在时域、频域进行,在频域的识别效果最好。

经过试验,时域特征不适合语音识别,因此需要使用快速傅里叶变换,将时域数据集变为频域数据集。

十七.中文期刊分类
文本分类方法包括传统的机器学习方法,如贝叶斯、支持向量机等,也包括新兴的深度学习方法,如fastText,TextCNN。

文本分类的处理过程:文本预处理,文本特征提取,分类模型构建。(与英文的相比,中文的预处理是关键技术)

中文文本的预处理包括:中文分词,文本预处理,文本特征工程。
中文分词方法:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法。
基于字符串匹配的分词方法:是一种基于词典的中文分词方法,建立统一的词典表,当需要分词时,将句子拆分成多个部分,若词语在词典中,则拆分成功。
基于理解的分词方法:让计算机模拟人对句子的理解,达到识别词的效果。
基于统计的分词方法:需要完整的语料库,按照概率进行分词,相邻字组成的词语的概率越大,就可以信任这个词语的组成。

文本预处理:包括分词(例如jieba分词)、去除停用词(如一些语气词、副词、介词、连词等等)、词性标注。

文本特征工程:抓取特征到类别之间的映射。方法包括基于词袋模型的特征表示、基于embedding的特征表示、基于神经网络模型提取的特征、基于任务本身提取的特征、特征融合、主题特征。
基于词袋模型的特征表示:词袋:由一系列词表示的文本集合,可以理解为一种数据结构
基于embedding的特征表示:通过词向量计算文本的特征,主要针对短文本。

词袋的形式:
词向量空间则在词袋基础上添加了tdm和vocabulary两个特征,其形式是:

词向量的tdm和label就是我们要训练的数据集中的数据和标签。

十八.图像压缩
图像压缩的意义:由于图像数据量大,其存储、传输、处理将耗费大量的资源、算力和带宽,因此要将图像进行压缩处理。
图像压缩分为无损压缩和有损有损,本质都是去除冗余的像素值。

图像数据冗余的表现:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在的相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余

你可能感兴趣的:(Python机器学习)