一些算法的总结

浏览: 1172


算法目的:分类、预测

算法分类:监督型、非监督型

算法的核心:你有什么数据、你要解决什么问题




01|线性回归:


1、什么是回归

回归,指研究一组随机变量(Y1 ,Y2 ,…,Yi)和另一组(X1,X2,…,Xk)变量之间关系的统计分析方法,又称多重回归分析。

2、回归算法

根据给予的训练集训练出一定的回归模型(即找出最佳回归直线 ),通过给训练出来的回归模型输入测试集即可得出相应的预测结果值。下图为工资与奖金的回归模型。


Clipboard Image.png


test点到回归直线距离的平方和称为残差平方和,这部分是由自变量以外的随机因素及非线性因素作用的结果,理想情况下该平方和为0(即test点就在回归线上),所以我们需要尽可能多的减小这部分值。具体的方法有:

  • 最小二乘法

  • 梯度下降法

3、衡量回归效果的指标——R^2

R^2=SSR/SST  (回归平方和/总离差平方和)

R^2——[0,1],越接近1说明回归平方和在总离差平方和中的占比越大,回归效果越好;越接近于0,结果相反。

4、代码实现(基于sklearn)

from sklearn import linear_model

reg = linear_model.LinearRegression() #创建回归模型

reg.fit(feature_train,target_train) #拟合数据

pred=reg.predict(feature_test)#用来预测某个(组)值对应的结果

reg.coef_#用来获取训练出来的回归方程的斜率

reg.intercept_#用来获取训练出来的回归方程的截距

reg.score(feature_test,target_test)#用来获取回归方程在测试数据上的R平方

reg.score(feature_train,target_train)#用来获取回归方程在测试数据上的R平方


02|决策树:


1、决策树是什么

决策树(Decision Tree)是一种简单但是广泛使用的分类器。通过训练数据构建决策树,可以高效的对未知的数据进行分类。

2、算法原理/步骤

首先需要找到影响分类的变量(特征),然后给这些特征进行优先级排序,根据优先级顺序依次进行分割, 直到每个分支下的数据都属于同一类型,无法再进行分割时,分割结束,算法结束。

比如现在有两个特征年龄和性别,是先按年龄进行划分还是先按性别进行划分,这就需要看两者的优先级顺序。

衡量优先级顺序的指标为:信息增益。在划分数据集之前之后信息发生的变化称为信息增益,我们可以计算每个每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。


Clipboard Image.png


3、代码实现(基于sklearn)

from sklearn import tree

from sklearn.metrics import accuracy_score

clf=tree.DecisionTreeClassifier(min_samples_split=40) #创建分类器

clf.fit(features_train, labels_train) #拟合数据

pred=clf.predict(features_test) #数据预测

print accuracy_score(pred,labels_test)#预测准确率



03|朴素贝叶斯:


1、朴素贝叶斯算法原理

假设有个值A以及N个分类,现在要把A值进行归类,分别计算A被分在各个类中的概率,选择概率最大的分类就是A值属于的分类。

2、代码实现(基于sklearn)

from sklearn.naive_bayes import GaussianNB

from sklearn.metrics import accuracy_score

clf = GaussianNB() #创建分类器

t0 = time()#初始化训练所用的时间

clf.fit(features_train,labels_train) #拟合数据

print "training time:", round(time()-t0, 3), "s"#计算训练所用的时间

t0 = time()#初始化预测所用的时间

pred = clf.predict(features_test) #预测分类

print "predict time:", round(time()-t0, 3), "s"#计算预测所用的时间

print accuracy_score(pred,labels_test)#计算分类准确率



04|支持向量机 (KNN):

1、SVM算法原理

SVM算法就是找到最佳分割平面,将数据分割开来。最佳分割平面就是距离分割平面最近点的距离最大化最大化对应的平面(线)。

2、代码实现(基于sklearn)

from sklearn import svm

from sklearn.metrics import accuracy_score

features_train = features_train[:len(features_train)/100] #缩小为1%的训练集

labels_train = labels_train[:len(labels_train)/100] #缩小为1%的训练集

clf = svm.SVC(C=10000.,kernel='rbf')#创建分类器

#t0 = time()

clf.fit(features_train,labels_train)#拟合数据

#print "training time:", round(time()-t0, 3), "s" #计算训练时间

pred = clf.predict(features_test)#预测数据

print accuracy_score(pred,labels_test)#计算准确率



05|K—近邻算法(KNN):


1、KNN算法原理

已经待分类值A以及m个已知值,计算值A与m个值的距离,选取距离最近的前K个值,看这个k个值中对应的哪个种类数较多,则值A就属于哪个分类。

2、代码实现(基于sklearn)

from sklearn.neighbors.nearest_centroid import NearestCentroid

from sklearn.metrics import accuracy_score

clf = NearestCentroid()

clf.fit(features_train, labels_train)

pred = clf.predict(features_test)

print accuracy_score(pred,labels_test)



06|K—均值聚类算法(Kmeans):

1、算法原理

首先,随机确定k个初始点作为质心,然后再进行质心的优化,优化原则每个簇中的每个点到质心的距离之和最小,最后达到聚类分类的效果。


2、代码实现(基于sklearn)

from sklearn.cluster import KMeans#导入Kmeans聚类模块

kmeans = KMeans(n_clusters=2, random_state=0)#创建聚类器

kmeans.fit(X)

kmeans.labels_

kmeans.predict([]) #预测

kmeans.cluster_centers_#质心显示

Clipboard Image.png

推荐 0
本文由 张俊红 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册