常見資料探勘演算法和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']])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關聯分析