一些算法的小结

总第54篇

算法目的:分类、预测

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

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


01|线性回归:

1、什么是回归

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

2、回归算法

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

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、算法原理/步骤

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

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

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

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_#质心显示

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

俊红的数据分析之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值