python机器学习17:总结

1.概述

机器学习定义:

最早是由一位人工智能领域的先驱,Arthu Samuel,在1959年提出来的。本意指的是一种让计算机在不经过明显编程的情况下,对数据进行学习,并且做出预测的方法,属于计算机科学领域的一个子集。

机器学习的应用场景:

1.电子商务中的智能推荐
2.社交网络中的效果广告
3.互联网金融中的风控系统
4.新闻资讯中的内容审查
5.机器学习在蝙蝠公司(互联网行业)之外的应用
6.一些炫酷的“黑科技”

机器学习中基本概念:

1.有监督学习:通过现有数据集进行建模,再用模型对新的数据样本进行分类或者回归分析的机器学习方法。在监督式学习中,训练数据集一般包含样本特征变量及分类标签,机器使用不同的算法通过这些数据推断出分类的方法。

2.无监督学习:在没有训练数据集的情况下,对没有标签的数据进行分析并建立合适的模型,以便给出问题解决方案的方法。在无监督学习当中,常见的两种任务类型是数据转换和聚类分析。

3.分类,回归:
分类和回归是有监督学习中两个最常见的方法。对于分类来说,机器学习的目标是对样本的分类标签进行预测,判断样本属于哪一个分类,结果是离散值。而对于回归分析来说,其目标是要预测一个连续的数值或者是范围。

5.模型的泛化:
在有监督学习中,我们会在数据集上建立一个模型,之后会把这个模型用于新的,之前从未见过的数据集中,这个过程称为泛化(generalization)。当然我们希望模型对于新数据的预测能够尽可能准确,这样才能模型泛化的准确度比较高。

6.过拟合:我们使用测试数据集对模型的表现进行评估,如果你在训练数据集上使用了一个非常复杂的模型,以至于这个模型在拟合训练数据集时表现非常好,但是在测试数据集的表现非常差,说明模型出现了过拟合的问题。

7.欠拟合:如果模型过于简单,连训练数据集的特点都不能完全考虑到的话,那么这样的模型在训练数据集和测试数据集的得分都会非常差,这个时候我们说模型出现了欠拟合的问题。

2.基于python语言的环境配置

1.Numpy——基础科学计算库

Numpy是一个Python中非常基础的用于进行科学计算的库,它的功能包括高维数组(array)计算、线性代数计算、傅里叶变换以及生产伪随机数等。

2.Scipy——强大的科学计算工具集

Scipy是一个python中用于进行科学计算的工具集,它有很多功能,如计算统计学分布、信号处理、计算线性代数方程等。

3.pandas——数据分析的利器

pandas是一个python用来进行数据分析的库,它可以生成类似Excel表格式的数据表,而且可以对数据表进行修改操作。pandas还有个强大的功能,它可以从很多不同种类的数据库中提取数据,如SQL数据库、Excel表格甚至csv文件。pandas还支持在不同的列中使用不同类型的数据,如整型数、浮点数、或是字符串。

4.matplotlib——画出优美的图形

matplotlib是一个python的绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,它能够输出的图形包括折线图、散点图、直方图等。在数据可视化方面,matplotlib拥有数量众多的忠实用户,其强悍的绘图能力能够帮我们对数据形成非常清晰直观的认知。

5.scikit-learn——非常流行的python机器学习库

scikit-learn包含众多顶级机器学习算法,它主要由六大类的基本功能,分别是分类、回归、聚类、数据降维、模型选择和数据预处理。

3.K最近邻算法

1.K最近邻算法的原理

近朱者赤、近墨者黑,新数据点离谁最近,就和谁属于同一类。

2.K最近邻算法在分类任务中的应用

我们用make_blobs生成的数据集一共有两类,这些数据集可以看做机器学习的训练数据集,是已知的数据,我们就是基于这些数据用算法来进行模型的训练,然后再对新的数据进行分类。

3.K最近邻算法在回归分析中的应用

在scikit-learn.datasets中有一个非常好的用于回归分析的数据集生成器,make_regression函数,我们使用了make_regression函数生成数据集,用KNeighborsRegressor定义分类模型,来进行了实验。在实验中,我们通过修改了n_neighbors的参数提高了模型的评分。

4.项目实战——使用K最近邻算法对酒的分类进行建模

还记得酒的数据集概况是(178,13),我们先用train_test_split生成训练集合测试集,然后用K最近邻算法对训练集进行建模,再使用测试集对模型进行评分,评分后,再用模型对新酒的分类进行预测。

4.广义线性模型

1.线性模型的基本概念

1.线性模型的一般公式:
y ⃗ = w [ 0 ] x [ 0 ] + w [ 1 ] x [ 1 ] + . . . + w [ p ] x [ p ] + b \vec{y}=w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b y =w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b
式中: y ⃗ \vec{y} y 表示y的估计值,x[0],x[1],x[p]为数据集变量的数量(这个公式的数据集有p个特征);w和b为模型的参数。公式简化为: y ⃗ = w [ 0 ] x [ 0 ] + b \vec{y}=w[0]x[0]+b y =w[0]x[0]+b

2.线性模型的图形表示:

线性模型会让自己距离每个数据点的加和最小值。这就是线性回归模型的原理

3.线性回归的特点:
使用一维数据集进行验证会让我们有一点偏颇,而对于特征变量较多的数据集来说,线性模型就显得十分强大。

4.常用的线性模型
线性回归、岭回归、套索回归、逻辑回归和线性SVC等。

2.线性回归模型

1.线性回归模型的基本原理:
找到当训练数据集中y的预测值和其真实值的平方差最小的时候,所对应的的w值和b值。

2.线性回归的性能表现:
由于线性回归自身的特点,非常容易出现过拟合的现象。

3.岭回归模型

1.岭回归的原理:岭回归是一种能避免过拟合的线性模型,保留所有特征变量,但减少特征变量的系数值,让特征变量对预测结果的影响较小。
2.参数调节:默认参数alpha=1,当alpha值越小,岭回归的特征变量系数增大,反之系数减小。
降低alpha值,会让系数值增大,模型倾向于过拟合的现象。

4.套索回归模型

1.套索回归的原理:和岭回归一样,套索回归也会将系数限制在非常接近0的范围内,但它进行限制的方式有一点不同,就是会导致在使用套索回归的时候,有一部分系数可能会等于0,这种方式称为L1正则化。
2.参数调节:默认参数alpha=1,当alpha值越小,套索回归的特征变量系数为0的减少,反之,系数为0的增多。
降低alpha值会让系数非0的增多,模型倾向于过拟合的现象。

5.朴素贝叶斯

1.贝叶斯定理
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)
2.朴素贝叶斯的简单应用
通过刮北风、闷热、多云,以及天气预报给出的信息来预测是否会下雨

3.贝努利朴素贝叶斯、高斯朴素贝叶斯和多项式朴素贝叶斯
通过实验,我们发现贝努利朴素贝叶斯适合与二项式分布的数据集,而多项式朴素贝叶斯适合计数类型的数据集,即非负,离散数值的数据集,而高斯朴素贝叶斯适用的面就要广得多,它可以应用于任何连续数值型的数据集当中,当然如果是正态分布的数据集的话,高斯朴素贝叶斯模型的得分会更高。
4.朴素贝叶斯实例——判断肿瘤是良性还是恶性
我们用了威斯康星乳腺肿瘤数据集,是一个非常经典的用于医疗病情分析的数据集,样本分为两类:恶性和良性。我们将数据集一如既往地拆分为训练集和测试集,对训练集进行建模,用测试集评分,分数为0.944,然后随便用其中一个样本进行预测,发现被分到了准确的分类了。

6.决策树与随机森林

决策树的基本原理

决策树是一种在分类与回归都有着非常广泛应用的算法,它的原理是通过对一系列问题进行if/else的推导,最终实现决策。

决策树的优势与不足

优势:
1.决策树有一个非常大的优势,就是可以很容易地将模型进行可视化
2.由于决策树算法对每个样本特征进行单独处理,因此并不需要对数据进行转换,不需要对数据进行预处理。
不足:
即便我们在建模的时候可以使用类似max_depth或是max_leaf_nodes等参数来对决策树进行预剪枝处理,但 它还是不可避免会出现过拟合问题。

随机森林的基本原理和构造

1.定义:随机森林有时被称为随机决策树,是一种集合学习方法,既可以用于分类,也可以用于回归。而所谓集合学习方法,其实就是把多个机器学习算法综合在一起制造出一个更加大的模型的意思。
2.构建:我们通过RandomForestClassifier构建了随机森林,使用酒的数据集来进行建模,发现随机森林相对于决策树所进行的分类更加细腻一些。
3.参数:
1.max_features参数发现max_features的取值越高,随机森林里的每一棵决策树就会长得越像,因为他们有更多不同特征可以选择,也就会更容易拟合数据,反之,如果max_features取值越低,就会迫使每棵决策树的样子更加不同,而且因为特征太少,决策树不得不制造更多节点来拟合数据。
2.n_estimators:这个参数控制的是随机森林中决策树的数量。

随机森林的优势和不足

优势:
1.随机森林集成了决策树的所有优点,而且能够弥补决策树的不足
2.随机森林支持并行处理。对于超大数据集来说,随机森林比较耗时(建立很多决策树),这时可以用多进程并行处理的方式来解决这个问题。
不足:
1.对于超高纬数据集、稀疏数据集来说,随机森林就有点捉襟见肘了,这种情况下,线性模型要比随机森林的表现更好一些。
2.随机森林相对更消耗内存,速度也比线性模型要慢。

实例演示

我们通过网上一个著名的数据集——成年人数据集来进行建模,数据集样本特征包括年龄、工作单位性质、学历、受教育时长、婚姻状态、职业、家庭情况等。我们选择了从年龄到职业一系列特征作为特征向量X,而收入>50K,作为标签y。将数据集还是拆分成训练集和测试集后,建模,评估,再用新的对象Mr.z的特征数据进行输入,用模型对他的收入进行预测,从而判断是否有必要进行下一步的相亲。

7.支持向量机SVM

支持向量机的基本原理和构造

1.定义:在SVM算法中,训练模型的过程实际上是对每个数据点对于数据分类决定边界的重要性进行判断,也就是说,在训练数据集中,只有一部分数据对于边界的确定是有帮助的,而这些数据点正好位于决定边界上的。这些数据被称为“支持向量”,这也是“支持向量机”名字的由来。

将数据投射至高维空间的方法:我们通过一些方法,实现将二维数据变成三维的过程,称为数据投射至高维空间。这就是SVM的核函数功能,在SVM中用得最普遍的两种把数据投射至高维空间的方法分别是多项式内核和径向内核。其中多项式内核,它是通过把样本原始特征进行乘方来把数据投射至高维空间。

支持向量机的核函数

1.通过选择不同的核函数,计算样本数据点之间的距离的方式不一样。
2.linearSVC和线性内核的SVC生成的决定边界都是线性的,在更高维数据集中将会是相交的超平面。例如RBF内核的SVC和多项式(polynomial)内核的SVC分类器的决定边界则完全不是线性的,他们更加弹性。

支持向量机的参数调节

在polynomial内核的svc中,起决定性作用的参数是degree和正则化参数C,而在RBF内核的SVC中,起决定性参数的是正则化参数C和参数gamma。
我们通过调节不同的参数gamma的值,发现gamma值越小,则RBF内核的直径越大,这样就会有更多的点被圈进决定边界中,所以决定边界就越平滑,模型也越简单;而随着参数的增加,模型则更倾向于把每一个点都放到相应的决定边界中,这时模型的复杂度也相应提高了。
所以gamma的值越小,模型越倾向于欠拟合,反之,模型越倾向于过拟合。

支持向量机的优势和不足

优势:
1.对各种不同类型的数据集都有不错的表现。
2.它可以在数据特征很少的情况下生成非常复杂的决定边界,当然特征数量很多的情况下表现也不错。
不足:
对于数据预处理和参数调节要求非常高。

支持向量机实例——对波士顿房价进行预测

在scikit-lean中,内置了一个非常适合做回归分析的数据集,波士顿房价数据集,我们用这个数据集,来实验了支持向量机。用训练数据集进行建模,用测试集评分,一开始的线性核函数和rbf差别很大,linear测试集得分0.69,rbf测试集得分0.001.经过图形可视化,发现数据集中各个特征的最大值和最小值差距很大,最后经过StandardScaler数据预处理,使所有特征最大值不会超过10,最小值都趋近于0,再次用预处理的数据训练模型,结果linear得分还是0.69,rbf测试集得分从0.001上生到0.65。后来再一次修改gamma和C两个参数,发现测试集得分再次上升到了0.89。由此可见,SVM算法对于数据预处理和参数调节的要求都是非常高了。

8.神经网络

1.神经网络的原理和非线性矫正

1.神经网络的原理:
在线性回归算法的过程里添加了隐藏层,在隐藏层重复进行上述加权求和计算,最后把隐藏层所计算的结果用来生成最终结果:如下图的转化
线性回归的图像表示
带1个隐藏层的MLP模型

2.非线性矫正
处理方法:
1.非线性矫正,简称relu(rectified linear unit)
2.双曲正切处理,简称tanh (tangens hyperbolicus)
图像表示:
对特征进行tanh和relu处理
经过tanh处理后的神经网络模型的公式:
h [ 0 ] = t a n h ( w [ 0 ] x [ 0 ] + w [ 1 ] x [ 1 ] + . . . + w [ p ] x [ p ] + b ) h[0] = tanh(w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b) h[0]=tanh(w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b)
h [ 1 ] = t a n h ( w [ 0 ] x [ 0 ] + w [ 1 ] x [ 1 ] + . . . + w [ p ] x [ p ] + b ) h[1] = tanh(w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b) h[1]=tanh(w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b)
h [ 2 ] = t a n h ( w [ 0 ] x [ 0 ] + w [ 1 ] x [ 1 ] + . . . + w [ p ] x [ p ] + b ) h[2] = tanh(w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b) h[2]=tanh(w[0]x[0]+w[1]x[1]+...+w[p]x[p]+b)
y ⃗ = v [ 0 ] h [ 0 ] + v [ 1 ] h [ 1 ] + . . . + v [ n ] h [ n ] \vec{y}=v[0]h[0]+v[1]h[1]+...+v[n]h[n] y =v[0]h[0]+v[1]h[1]+...+v[n]h[n]
多个隐藏层会更加复杂,如下图:
对模型添加新的隐藏层
在大型神经网络中,有很多这样的隐藏层,这也是“深度学习”中“深度”二字的来源。

2.神经网络的模型参数调节

目前四种方法调整参数:
1.隐藏层的节点数
2.隐藏层的层数
3.activation
4.alpha
在使用酒的训练数据集训练模型中,我们发现,让决定边界更加细腻的方法,一个方法是增加单个隐藏层中的节点数,即hidden_layer_sizes参数调大。另一个方法是把activation参数改为tanh。

3.使用神经网络训练手写数字识别模型

我们使用了MNIST专门用来训练各种图像处理系统的庞大数据集来进行了实验,同样分成了训练数据集和测试数据集,训练模型使用的参数是2个隐藏层,每层100个节点,Activation参数为relu,正则化alpha参数为le-5(1*10^-5),即0.0001.测试集得分93.6%,最后随意拿了一个新的数字4,预测出了正确结果。

4.神经网络的优势与不足

优势:神经网络可以从超大数据集中获取信息并且可以建立极为复杂的模型,所以在计算能力充足并且参数设置合适的情况下,神经网络可以比其他的机器学习算法表现更加优异。
不足:模型训练的时间长、对数据预处理的要求较高。对于特征类型比较单一的数据集来说,神经网络表现不错,但是如果数据集中的特征类型差异较大的话,随机森林等基于决策树的算法会表现更好。

9.数据预处理、降维、特征提取及聚类

1.几种常见的数据预处理工具

1.StandardScaler
2.MinMaxScaler
3.RobustScaler
4.Normalizer

2.PCA主成分分析用于数据降维

1.PCA主成分分析:
数据集从一个散点组成的面形成一条直线,从二维变成了一维,用到的降维方法称为主成分分析法(principal Component Analysis,PCA).
2.原始特征与PCA主成分分析之间的关系:
提取的主成分中涉及了所有的特征

3.PCA主成分分析和NMF非负矩阵分解用于特征提取

1.PCA白化处理,降低特征之间的相关度,特征数量
2.非负矩阵分解,如果降低NMF的成分数量,它会重新生成新的成分,而新的成分和原来的成分完全不一样。

4.几种常用的聚类算法

1.K均值聚类
2.凝聚聚类
3.基于密度的有噪声应用空间聚类(DBSCAN)

10. 数据表达与特征工程

1.数据表达

1.使用哑变量转化类型特征
2.装箱处理

2.数据“升维”

1.向数据集添加交互式特征
2.多项式特征

3.自动特征选择

1.单一变量法:
选择那些置信度最高的样本特征进行分析。只适用于样本特征之间没有明显关联的情况。
2.基于模型的特征选择:
先使用一个有监督学习的模型对数据特征的重要性进行判断,然后把最重要的特征进行保留。

3.迭代式特征选择:
基于若干个模型进行特征选择,先用某个模型对特征进行选择,之后再建立两个模型,其中一个对已经选择的模型进行筛选;另外一个对被剔除的特征进行筛选,一直重复这个步骤,直到达到我们指定的特征数量

11.模型评估与优化

1.使用交叉验证进行模型评估

反复地拆分数据集,进行建模和测试,最终取平均分的一种模型评估方法

2.使用网格搜索优化模型参数

遍历全部的参数设置,找到最高分和对应的参数

3.分类模型的可信度评估

1.分类模型中的预测准确率
2.分类模型中的决定系数

12建立算法的管道模型

1.管道模型的概念和用法

概念:管道模型就是可以将多个算法打包一起使用的一个模型。
用法:先使用make_blobs生成2分类的数据集,再我们使用管道模型进行了网格搜索,先将预处理StandardScaler工具和mlp模型,放入管道模型,再用管道模型进行拟合训练数据集并对测试集进行评分,最后我们进行网格搜索,给网格搜索传入管道、模型参数和模型。得到最后的对象,从这个对象中可以得到交叉验证最高分,模型最优参数和测试集得分等。

2.使用管道模型对股票涨幅进行回归分析

1.我们准备了股票涨幅的数据集,然后建立预处理和MLP模型的管道模型,再把管道模型代入交叉验证模型,得分0.6分。
2.我们调整了管道模型,给管道模型中增加了一个特征选择的模型SelectFromModel(基于决策树),再使用交叉验证法,得分0.89

3.使用管道模型进行模型选择和参数调优

3.后来我们再次使用管道模型进行模型选择,希望找到适合我们数据集的算法。于是在管道模型的参数中加入了两个模型,一个是随机森林,一个是MLP。将模型代入代入网格搜索, 结果发现随机森林算法比神经网络的得分还高。
4.但我们还不确定,因为参数都是使用默认的(MLP隐藏层(100,),随机森林的n_estimators为10个),最后我们通过管道模型寻找最优参数,继续向管道参数中添加参数值(神经网络的隐藏层和决策树的n_estimators)。重新将管道代入网格搜索模型中,得到最佳模型(包括最佳参数)和得分。得分再一次增长,发现随机森林还是优于MLP
5.最终,我们再次调整了随机森林的n_estimators和MLP的迭代次数提高,发现随机森林的分数还是比神经网络的评分更高,并且两个模型的分数也再次有所提升。

13文本数据处理

1.文本数据的特征提取、中文分词及词袋模型

1.使用CountVectorizer对文本进行特征提取,此方法可以对空格分割的词分别进行统计。先实例化,再拟合有空格的文本,形成文本字典,可以用来模型训练。
2.使用CountVectorizer的transform方法,可以生成词袋模型,词袋模型可以直接通过.toarray()方法进行密度表达(每个词出现的次数)。

2.对文本数据进一步优化处理

1.解决上文中单词出现的顺序被无视的问题:
要解决这个问题,我们可以调整CountVectorizer中的ngram_range参数进行调节。
2.n_Gram定义:n_Gram是大词汇连续文本或语音识别中常用的一种语言模型,它是利用上下文相邻词的搭配信息来进行文本数据转换的,其中n代表一个整型数值,例如n等于2的时候,模型称为bi-Gram,意思是n-Gram会对相邻的两个单词进行配对;而n等于3时,模型成为tri-Gram,也就是会对相邻的3个单词进行配对。将ngram_range参数调节为(2,2),意思是进行组合的单词数量的下限是2,上限也是2.
3.使用tf-idf模型对文本数据进行提取:
在scikit-learn当中,有两个类使用了tf-idf方法,其中一个是TfidfTransformer,它用来将CountVectorizer从文本中提取的特征进行转化;另一个是TfidfVectorizer,它和CountVector的用法是相同的——简单理解的话,它相当于把CountVectorizer和TfidfTransformer所做的工作整合在了一起。
4.删除文本中的停用词:
停用词,指的是那些在文本处理过程中被筛除出去的,出现频率高但又没有什么实际意义的词。激活英语停用词参数:
tfidf = TfidfVectorizer(smooth_idf=False,stop_words=‘english’).

14.从数据获取到话题提取

使用潜在狄利克雷分布进行话题提取

我们使用网上爬取的50页的段子来作为数据进行实验,将所有段落进行分词,形成一个超大规模的分词。将这些分词使用CountVectorizer或者是TfidfVectorizer,例中我们选择了使用TfidfVectorizer,然后使用LDA模型进行话题提取。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值