算法目的:分类、预测
算法分类:监督型、非监督型
算法的核心:你有什么数据、你要解决什么问题
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平方
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)#预测准确率
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)#计算分类准确率
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)#计算准确率
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)
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_#质心显示
End.
作者:张俊红(中国统计网特邀认证作者)
本文为中国统计网原创文章,需要转载请联系中国统计网(小编微信:itongjilove),转载时请注明作者及出处,并保留本文链接。