一些算法的小结
總第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_#質心顯示
總結
- 上一篇: QQ戳一戳怎么关掉
- 下一篇: 复旦大学女教授告诉你:朋友是什么?