1. 程式人生 > >常見資料探勘演算法和Python簡單實現

常見資料探勘演算法和Python簡單實現

1、K近鄰演算法

原理:計算待分類樣本與每個訓練樣本的距離,取距離最小的K個樣本,這k個樣本,哪個類別佔大多數,則該樣本屬於這個類別。

優點:1、無需訓練和估計引數,2、適合多分類,3、適合樣本容量比較大的問題

缺點:1、對測試樣本記憶體開銷大,2、可解釋性差,無法生成規則,3、對樣本量小的問題,容易誤分

經驗:K一般低於樣本量的平方根,基於交叉驗證

問題:類別判斷:投票法沒有考慮距離的遠近,可以採用加權投票‘’

          高維度變數:維度越高,歐氏距離的區分能力越差。

import numpy as np

from sklearn import neighbors

knn = neighbors.KNeighborsClassifier()

knn.fit(x,y)

knn.predict() 

2、決策樹

原理:以樹的結構遞迴的選擇特徵,並根據特徵對樣本進行分割,獲得子樹結構的過程。

優點:1、速度快,容易形成規則,2、準確度高,易於理解;3、可以處理連續和分類欄位,4、不需要引數假設和任何領域知識,5、適合高維資料

缺點:1、對於各類別樣本數量不一致資料,資訊增益偏向於數值更多的特徵,2、易於過擬合,3、忽略關性

ID3:使用資訊增益作為特徵選擇的度量,1、當分類不均勻時,分類精度大打折扣;2、不能處理連續資料和帶缺失值資料

import numpy as np from sklearn import tree from sklearn.metrics import precision_recall_curve from sklearn.metrics import classification_report from sklearn.cross_validation import train_test_split data = np.array([[1.5 ,50,'thin'], [1.5 ,60, 'fat'] ,[1.6 ,40 ,'thin'], [1.6 ,60, 'fat'] ,[1.7 ,60 ,'thin'], [1.7 ,80 ,'fat'] ,[1.8 ,60 ,'thin'],[1.8 ,90 ,'fat'], [1.9 ,70 ,'thin'],[1.9 ,80, 'fat']])
labels = data[:,-1] y = np.zeros(labels.shape) y[labels=='fat']=1 y[labels=='thin']=0 x = data[:,:2] x_train,x_test,y_train,y_test = train_test_split(x,y, test_size=0.2,random_state=0)  clf=tree.DecisionTreeClassifier(criterion='entropy') clf.fit(x_train, y_train) with open("tree.dot", 'w') as f:     f = tree.export_graphviz(clf, out_file=f) print (clf.feature_importances_) precision, recall, thresholds = precision_recall_curve(y_train,clf.predict(x_train)) answer = clf.predict_proba(x)[:,1] print(classification_report(y,answer,target_names = ['thin', 'fat']))

3、樸素貝葉斯

原理:對於待分類的專案,    求解此項出現的條件下各類別出現的概率,那個最大,此待分類項就屬於哪個類別。

優點:分類速度快,對缺失值不敏感,準確度高

缺點:需要知道先驗概率

from sklearn.naive_bayes import GaussianNB

model = GaussianNB()

model.fit(x, y )

model.predict()

4、Logistic迴歸

原理:面對一個迴歸或者分類函式,建立一個代價函式,通過迭代法求解出最優模型引數。

優點:速度快。適合二分類問題;直接看到各個特徵的權重,能更容易更新模型吸收新的資料。

缺點:對資料和場景的適應能力不強。

過擬合問題往源自 過多的特徵 解決方法 1)減少特徵數量(減少特徵會失去一些資訊,即使特徵選的很好)  可用人工選擇要保留的特徵;  模型選擇演算法;  2)正則化(特徵較多時比較有效)  保留所有特徵,但減少θ的大小

5、支援向量機

原理:通過最大化分類分界點到分類介面距離來實現分類。

優點:提高泛化效能,解決小樣本下機器學習的問題,避免神經昂神經網路選擇和區域性極小的問題。

缺點:對缺失資料敏感,記憶體消耗大,難解釋。

SVM和邏輯迴歸區別:

從目標函式看,邏輯迴歸採用logistical loss ,SVM採用hinge loss。

邏輯迴歸是引數模型,SVM是非引數模型。

6、Adaboost

整合學習:1、boosting是同一種機器學習演算法,資料抽取時,裙權值在不斷更新,每次提高前一次分錯了的資料集的權值,最後得到T個弱分類器,且分類器的權值跟中間結果的資料有關;

bagging:同一種弱分類器,資料抽取通過有放回抽樣(bootstrap);

stacking演算法:第一層行程T個弱分類器,生成相同的新資料及,利用這個資料集和新演算法構成第二層分類器。

adaboost演算法:是一種迭代演算法,針對同一個訓練集訓練不同的分類器,然後把分類器集合起來,構成一個更強的分類器。關注被錯分的樣本,器重好的分類器

優點:不擔心過擬合問題,不用做特徵篩選,可以用各種方法構造分類器。

from sklearn.ensemble import GradientBoostingcClassifier

model=GradientBoostingClassifier(n_estimators=100,learning_rate=1.0,max_depth=1,random_state=0)

model.fit()

7、K-均值聚類

優點:當聚類是密集的,且類與類之間區別明顯時,效果較好;對於處理大資料及,這個演算法相對高校,計算複雜度為O(NKT),N是資料量,  K 是聚類中心, T是迭代的次數。

from sklearn.clster import KMeans

clf = KMeans(n_clusters=3,max_iter=300,n_init=10)

8、PCA

原理:通過線性投影,將高維空間對映到低維空間,所投影維度上資料的方差最大。

注意:使用pca可以提取主成分,肯能會解決一些過擬合問題,但不建議使用降維解決過擬合,建議加個正則化項來解決。

只有源資料結果較好,但嫌他太慢採用主成分分析。

from sklearn.decomposition import PCA import numpy as np import pandas as pd data = np.random.randn(10,4) pca = PCA() pca.fit(data) print (pca.components_) print (pca.explained_variance_ratio_) pca = PCA(3) pca.fit(data) lowd = pca.transform(data) pd.DataFrame(lowd).to_excel("E:/contest_data/result.xlsx") pca.inverse_transform(lowd)

10.apriori關聯分析