首页 > 编程知识 正文

列举十个经典的数据挖掘算法,大数据十大经典算法

时间:2023-05-06 04:13:07 阅读:153088 作者:1456

相关文章:

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/3358 www.Sina.com.Sina.com/http://ww.Sina.com 简档SVM(supportvectormachine )名称是一种支持向量机,是一种通用的判别方法。 在机器学习领域,是一种有监督的学习模式,通常用于模式识别、分类、回归分析。

相关概念数据挖掘领域十大经典算法之—C4.5算法(超详细附代码):分类器是给定样本数据以确定该样本属于哪个类别的算法。 例如,股票上涨预测中,认为前一天的交易量和收盘价会影响第二天的上涨。 分类器是根据样品的交易量和收盘价预测第二天涨价状况的算法。

数据挖掘领域十大经典算法之—K-Means算法(超详细附代码):在分类问题中,输入分类器的数据称为特征。 以上证报涨预测问题为例,其特征是前一天的交易量和收盘价。

数据挖掘领域十大经典算法之—Apriori算法:线性分类器是一种分类器,判定分类结果的依据是通过特征的线性组合得到的,不能以特征的非线性运算结果作为判定依据。 以上证股价上涨预测问题为例,判断的依据只能是前一天的交易量和收盘价的线性组合,不能对交易量和收盘价进行卡方等运算。

线性鉴别器的起源在实际应用中,给定了几个数据点,它们属于两个不同的类,但是现在容易遇到找到将数据分类为两个类的线性鉴别器的问题。

怎么分? 把整个空间分成两半真好啊。 在二维空间中举例,如上图所示,用直线切出空间。 直线左边的点属于类别-1(),直线右边的点属于类别1 ) )。

用数学语言的话,就是这样。 空间是由X1和X2组成的二维空间,直线方程为X1 X2=1,用矢量符号表示为[ 1,1 ] ^ { t } [ x1,X2]-1=0。 点x位于直线的左边,意味着如果将x放入方程式的左边,计算结果会小于0。 同样,在右边把x放在方程的左边,计算结果大于0。 是高中的数学知识。

在二维空间中,空间被直线分割。

在三维空间里怎么样? 你需要用平面把空间切成一半。 相应的方程为X1 X2 X3=1,即[ 1,1,1 ] ^ { t } [ x1,X2,X3]-1=0。

在高维(n3 )空间中? 我们需要用n-1维超平面来切空间。 抽象地总结一下:

用x表示数据点,y表示类别,一个线性分类器的学习目标是在n维数据空间中找到超平面(hyper plane ),截取空间,该超平面的方程是) W^{T}的t代表倒置)。

W^{T}X b=0

数据挖掘领域十大经典算法之—EM算法

常见的线性分类器有感知器模型和逻辑回归。 上一节列举的例子是感知器模型,直接给你分类。 根据情况,不仅想知道分类器对新数据的分类结果,还想知道分类器对这次分类的成功概率。 用逻辑回归可以做这件事。

逻辑回归(虽然被称为回归,但不是回归方法,但是是分类算法。 我说蛋疼)用logistic函数把线性分类器超平面方程的计算结果从正负无穷映射到0到1。 这样,映射的结果被认为是分类器判定x为类1的概率,可以指导之后的学习过程。

例如,看天气预报,使用探测器的天气预报,只能知道明天下雨(y=1)还是明天不下雨(y=-1 ); 根据使用逻辑回归的天气预报可知,明天有90%的概率下雨,10%的概率不下雨。

逻辑回归的公式为g(z ) ((FRAC{1} ) 1e^{-z} ),图像大致是这样的。

怎么用? 例如,在感知器模型中,将特征代入判别式,如果所得值为-3,则可确定类别为-1(因为-30 )。 另外一方面,在逻辑回归中,将-3代入g(z )时,如果该数据属于类别1概率为0.05 )近似值,则属于类别-1的概率为10.05=0. 95 也就是说,用概率的观点来记述这件事。

支持向量机VS感知器和逻辑回归根据上述讨论可知,在多维空间中,一个超平面可以将数据分为两类。 这个超平面为数据挖掘领域十大经典算法之—PageRank算法但是,这个分离超平面也可以有很多。 那么,用哪个?

在上图中,相对于当前的训练数据,绿色和黑色的直线(二维特征空间、超平面分离后成为直线) ) )

可以很好的进行分类。但是,通过已知数据建立分离超平面的目的,是为了对于未知数据进行分类的。在下图中,蓝色的星星图案就是新加入的真实数据。

这时候我们就可以看出不同的分离超平面的选择对于分类效果的影响了。有的绿线会将三个点都划归蓝色圆圈,有的绿线会将三个点都划归红色正方形。

那么绿线和黑线留下谁?我们认为,已有的训练数据中,每个元素距离分离超平面都有一个距离。在添加超平面的时候,尽可能的使最靠近分离超平面的那个元素与超平面的距离变大。这样,加入新的数据的时候,分的准的概率会最大化。感知器模型和逻辑回归都不能很好的完成这个工作,该我们的支持向量机(support vector machine,SVM)出场了。

首先,SVM将函数间隔(left| W^{T}X+b right| ,将特征值代入分离超平面的方程中,得到的绝对值)归一化,归一化的目的是除掉取值尺度的影响;其次,对所有元素求到超平面的距离,(这个距离是frac{left| W^{T}X+b right| }{left| W right| } ,也就是几何间隔)。给定一个超平面P,所有样本距离超平面P的距离可以记为d_{ij}=frac{left| W^{T}X+b right| }{left| W right| } ,这其中最小的距离记为D_{P},SVM的作用就是找到D_{P}最大的超平面。

可以看出,大部分数据对于分离超平面都没有作用,能决定分离超平面的,只是已知的训练数据中很小的一部分。这与逻辑回归有非常大的区别。上图中,决定黑色的这条最优分离超平面的数据只有下方的两个红色的数据点和上方的一个蓝色的数据点。这些对于分离超平面有着非常强大影响的数据点也被称为支持向量(看没看到,这就是传说中的支持向量啦,原来如此)。

引入黑科技-核函数

上面说的都是在原始特征的维度上,能直接找到一条分离超平面将数据完美的分成两类的情况。但如果找不到呢?

比如,原始的输入向量是一维的,0< x <1的类别是1,其他情况记做-1。这样的情况是不可能在1维空间中找到分离超平面的(一维空间中的分离超平面是一个点,aX+b=0)。你用一个点切一下试试?

这就要说到SVM的黑科技—核函数技巧。核函数可以将原始特征映射到另一个高维特征空间中,解决原始空间的线性不可分问题。

继续刚才那个数轴。

如果我们将原始的一维特征空间映射到二维特征空间X^{2}和x,那么就可以找到分离超平面X^{2}-X=0。当X^{2}-X<0的时候,就可以判别为类别1,当X^{2}-X>0 的时候,就可以判别为类别0。如下图:

再将X^2-X=0映射回原始的特征空间,就可以知道在0和1之间的实例类别是1,剩下空间上(小于0和大于1)的实例类别都是0啦。

利用特征映射,就可以将低维空间中的线性不可分问题解决了。是不是很神奇,这就是特征映射的牛逼之处了。核函数除了能够完成特征映射,而且还能把特征映射之后的内积结果直接返回,大幅度降低了简化了工作,这就是为啥采用核函数的原因。

SVM三种模型

SVM有三种模型,由简至繁为

当训练数据训练可分时,通过硬间隔最大化,可学习到硬间隔支持向量机,又叫线性可分支持向量机 当训练数据训练近似可分时,通过软间隔最大化,可学习到软间隔支持向量机,又叫线性支持向量机当训练数据训练不可分时,通过软间隔最大化及核技巧(kernel trick),可学习到非线性支持向量机 代码

代码已在github上实现,这里也贴出来

# encoding=utf-8import timeimport numpy as npimport pandas as pdfrom sklearn.cross_validation import train_test_splitfrom sklearn.metrics import accuracy_scorefrom sklearn import datasetsfrom sklearn import svmif __name__ == '__main__': print('prepare datasets...') # Iris数据集 # iris=datasets.load_iris() # features=iris.data # labels=iris.target # MINST数据集 raw_data = pd.read_csv('../data/train_binary.csv', header=0) # 读取csv数据,并将第一行视为表头,返回DataFrame类型 data = raw_data.values features = data[::, 1::] labels = data[::, 0] # 选取33%数据作为测试集,剩余为训练集 train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0) time_2=time.time() print('Start training...') clf = svm.SVC() # svm class clf.fit(train_features, train_labels) # training the svc model time_3 = time.time() print('training cost %f seconds' % (time_3 - time_2)) print('Start predicting...') test_predict=clf.predict(test_features) time_4 = time.time() print('predicting cost %f seconds' % (time_4 - time_3)) score = accuracy_score(test_labels, test_predict)print("The accruacy score is %f" % score)

测试数据集为经过二分类处理后的MNIST数据集,获取地址train_binary.csv

运行结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。