一些算法的小结
總第54篇
算法目的:分類(lèi)、預(yù)測(cè)
算法分類(lèi):監(jiān)督型、非監(jiān)督型
算法的核心:你有什么數(shù)據(jù)、你要解決什么問(wèn)題
01|線性回歸:
1、什么是回歸
回歸,指研究一組隨機(jī)變量(Y1 ,Y2 ,…,Yi)和另一組(X1,X2,…,Xk)變量之間關(guān)系的統(tǒng)計(jì)分析方法,又稱(chēng)多重回歸分析。
2、回歸算法
根據(jù)給予的訓(xùn)練集訓(xùn)練出一定的回歸模型(即找出最佳回歸直線 ),通過(guò)給訓(xùn)練出來(lái)的回歸模型輸入測(cè)試集即可得出相應(yīng)的預(yù)測(cè)結(jié)果值。下圖為工資與獎(jiǎng)金的回歸模型。
test點(diǎn)到回歸直線距離的平方和稱(chēng)為殘差平方和,這部分是由自變量以外的隨機(jī)因素及非線性因素作用的結(jié)果,理想情況下該平方和為0(即test點(diǎn)就在回歸線上),所以我們需要盡可能多的減小這部分值。具體的方法有:
最小二乘法
梯度下降法
3、衡量回歸效果的指標(biāo)——R^2
R^2=SSR/SST ?(回歸平方和/總離差平方和)
R^2——[0,1],越接近1說(shuō)明回歸平方和在總離差平方和中的占比越大,回歸效果越好;越接近于0,結(jié)果相反。
4、代碼實(shí)現(xiàn)(基于sklearn)
from sklearn import linear_model
reg = linear_model.LinearRegression() #創(chuàng)建回歸模型
reg.fit(feature_train,target_train) #擬合數(shù)據(jù)
pred=reg.predict(feature_test)#用來(lái)預(yù)測(cè)某個(gè)(組)值對(duì)應(yīng)的結(jié)果
reg.coef_#用來(lái)獲取訓(xùn)練出來(lái)的回歸方程的斜率
reg.intercept_#用來(lái)獲取訓(xùn)練出來(lái)的回歸方程的截距
reg.score(feature_test,target_test)#用來(lái)獲取回歸方程在測(cè)試數(shù)據(jù)上的R平方
reg.score(feature_train,target_train)#用來(lái)獲取回歸方程在測(cè)試數(shù)據(jù)上的R平方
02|決策樹(shù):
1、決策樹(shù)是什么
決策樹(shù)(Decision Tree)是一種簡(jiǎn)單但是廣泛使用的分類(lèi)器。通過(guò)訓(xùn)練數(shù)據(jù)構(gòu)建決策樹(shù),可以高效的對(duì)未知的數(shù)據(jù)進(jìn)行分類(lèi)。
2、算法原理/步驟
首先需要找到影響分類(lèi)的變量(特征),然后給這些特征進(jìn)行優(yōu)先級(jí)排序,根據(jù)優(yōu)先級(jí)順序依次進(jìn)行分割, 直到每個(gè)分支下的數(shù)據(jù)都屬于同一類(lèi)型,無(wú)法再進(jìn)行分割時(shí),分割結(jié)束,算法結(jié)束。
比如現(xiàn)在有兩個(gè)特征年齡和性別,是先按年齡進(jìn)行劃分還是先按性別進(jìn)行劃分,這就需要看兩者的優(yōu)先級(jí)順序。
衡量?jī)?yōu)先級(jí)順序的指標(biāo)為:信息增益。在劃分?jǐn)?shù)據(jù)集之前之后信息發(fā)生的變化稱(chēng)為信息增益,我們可以計(jì)算每個(gè)每個(gè)特征值劃分?jǐn)?shù)據(jù)集獲得的信息增益,獲得信息增益最高的特征就是最好的選擇。
3、代碼實(shí)現(xiàn)(基于sklearn)
from sklearn import tree
from sklearn.metrics import accuracy_score
clf=tree.DecisionTreeClassifier(min_samples_split=40) #創(chuàng)建分類(lèi)器
clf.fit(features_train, labels_train) #擬合數(shù)據(jù)
pred=clf.predict(features_test) #數(shù)據(jù)預(yù)測(cè)
print accuracy_score(pred,labels_test)#預(yù)測(cè)準(zhǔn)確率
03|樸素貝葉斯:
1、樸素貝葉斯算法原理
假設(shè)有個(gè)值A(chǔ)以及N個(gè)分類(lèi),現(xiàn)在要把A值進(jìn)行歸類(lèi),分別計(jì)算A被分在各個(gè)類(lèi)中的概率,選擇概率最大的分類(lèi)就是A值屬于的分類(lèi)。
2、代碼實(shí)現(xiàn)(基于sklearn)
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
clf = GaussianNB() #創(chuàng)建分類(lèi)器
t0 = time()#初始化訓(xùn)練所用的時(shí)間
clf.fit(features_train,labels_train) #擬合數(shù)據(jù)
print "training time:", round(time()-t0, 3), "s"#計(jì)算訓(xùn)練所用的時(shí)間
t0 = time()#初始化預(yù)測(cè)所用的時(shí)間
pred = clf.predict(features_test) #預(yù)測(cè)分類(lèi)
print "predict time:", round(time()-t0, 3), "s"#計(jì)算預(yù)測(cè)所用的時(shí)間
print accuracy_score(pred,labels_test)#計(jì)算分類(lèi)準(zhǔn)確率
04|支持向量機(jī) (KNN):
1、SVM算法原理
SVM算法就是找到最佳分割平面,將數(shù)據(jù)分割開(kāi)來(lái)。最佳分割平面就是距離分割平面最近點(diǎn)的距離最大化最大化對(duì)應(yīng)的平面(線)。
2、代碼實(shí)現(xiàn)(基于sklearn)
from sklearn import svm
from sklearn.metrics import accuracy_score
features_train = features_train[:len(features_train)/100] #縮小為1%的訓(xùn)練集
labels_train = labels_train[:len(labels_train)/100] #縮小為1%的訓(xùn)練集
clf = svm.SVC(C=10000.,kernel='rbf')#創(chuàng)建分類(lèi)器
#t0 = time()
clf.fit(features_train,labels_train)#擬合數(shù)據(jù)
#print "training time:", round(time()-t0, 3), "s" #計(jì)算訓(xùn)練時(shí)間
pred = clf.predict(features_test)#預(yù)測(cè)數(shù)據(jù)
print accuracy_score(pred,labels_test)#計(jì)算準(zhǔn)確率
05|K—近鄰算法(KNN):
1、KNN算法原理
已經(jīng)待分類(lèi)值A(chǔ)以及m個(gè)已知值,計(jì)算值A(chǔ)與m個(gè)值的距離,選取距離最近的前K個(gè)值,看這個(gè)k個(gè)值中對(duì)應(yīng)的哪個(gè)種類(lèi)數(shù)較多,則值A(chǔ)就屬于哪個(gè)分類(lèi)。
2、代碼實(shí)現(xiàn)(基于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—均值聚類(lèi)算法(Kmeans):
1、算法原理
首先,隨機(jī)確定k個(gè)初始點(diǎn)作為質(zhì)心,然后再進(jìn)行質(zhì)心的優(yōu)化,優(yōu)化原則每個(gè)簇中的每個(gè)點(diǎn)到質(zhì)心的距離之和最小,最后達(dá)到聚類(lèi)分類(lèi)的效果。
2、代碼實(shí)現(xiàn)(基于sklearn)
from sklearn.cluster import KMeans#導(dǎo)入Kmeans聚類(lèi)模塊
kmeans = KMeans(n_clusters=2, random_state=0)#創(chuàng)建聚類(lèi)器
kmeans.fit(X)
kmeans.labels_
kmeans.predict([]) #預(yù)測(cè)
kmeans.cluster_centers_#質(zhì)心顯示
總結(jié)
- 上一篇: QQ戳一戳怎么关掉
- 下一篇: 复旦大学女教授告诉你:朋友是什么?