演算法效能的比較資料集見(1)分別讀取「連續屬性」資料夾中的七個資料集合
(2)對於每個資料集分別利用決策樹、樸素貝葉斯以及近鄰分類演算法建模(近鄰數k如何確定呢?),並利用五折交叉驗證計算每個模型的分類精度。
(3)分別利用符號秩檢驗,比較一下決策樹與樸素貝葉斯之間、決策樹與k近鄰分類演算法之間、樸素貝葉斯與k近鄰分類演算法之間是否存在顯著性差異,其中給定的顯著性水平為0.05.
我的資源-演算法效能的比較資料集
# -*- coding: utf-8 -*-
"""created on thu nov 26 23:53:07 2020
@author: 麥地
"""import os
import re
import numpy as np
import pandas as pd
import scipy.stats as stats
from sklearn.model_selection import kfold
from sklearn.*****_bayes import gaussiannb
from sklearn.tree import decisiontreeclassifier
from sklearn.neighbors import kneighborsclassifier
#讀取資料檔案,將其儲存在列表中
frames=
path=r'c:\users\desktop\data mining\資料評價\data'
for data_path in os.listdir(path)
:"/"
+data_path)
#資料轉換,將類標籤轉換為數值,防止後續異常
for i in frames:
data=pd.read_csv(i)
data_op=pd.categorical(data[data.columns[-1
]]) data[data.columns[-1
]]=data_op.codes
#資料集劃分
x=data.iloc[:,
:-1]
y=data.iloc[:,
-1] kf = kfold(n_splits=5)
#三種演算法準確率
bayesauc=
0 dessiontreeauc=
0 knnauc=
0for train_index,test_index in kf.split(x)
: x_train=x.iloc[train_index]
y_train=y.iloc[train_index]
x_test =x.iloc[test_index]
y_test =y.iloc[test_index]
#利用貝葉斯**
gnb=gaussiannb(
) bayes_pred=gnb.fit(x_train,y_train)
#擬合 pred_bayes=bayes_pred.predict(x_test)
#** y_score_bayes=np.array(pred_bayes)
correct_score_bayes=
(y_score_bayes==y_test)
.sum()
bayesauc+=
100*correct_score_bayes/y_test.shape[0]
#用正確的**數量比總數量得到**精度
#利用決策樹**
clf=decisiontreeclassifier(
) clf = clf.fit(x_train,y_train)
#擬合 pred_tree=clf.predict(x_test)
#** y_score_tree=np.array(pred_tree)
correct_score_tree=
(y_score_tree==y_test)
.sum()
dessiontreeauc+=
100*correct_score_tree/y_test.shape[0]
#聚類組數:類別標籤不同的數目,即len(data[data.columns[-1]].unique())
knn=kneighborsclassifier(n_neighbors=
len(data[data.columns[-1
]].unique())
) knn.fit(x_train,y_train)
pred_knn=knn.predict(x_test)
#** y_score_knn=np.array(pred_knn)
correct_score_knn=
(y_score_knn==y_test)
.sum()
knnauc+=
100*correct_score_knn/y_test.shape[0]
#進行精度輸出
bayesauc/=
5 dessiontreeauc/=
5 knnauc/=
5 data_name=re.findall(r"/(.*?).dat"
,i)print
("="*70
)print
("在{}資料集上三種演算法的效果如下:"
.format
(data_name[0]
[5:]
))print
("貝葉斯分類精度為:%"
.format
(bayesauc)
)print
("決策樹分類精度為:%"
.format
(dessiontreeauc)
)print
("k近鄰分類精度為:%"
.format
(knnauc)
)#進行符號秩檢驗
print
("在{}資料集上三種演算法的顯著性差異度量如下:"
.format
(data_name[0]
[5:]
))#貝葉斯與決策樹
w1=stats.wilcoxon(pred_bayes,pred_tree,correction=
true
,alternative=
'greater')if
(w1.pvalue<
0.05):
print
("貝葉斯與決策樹的p=<0.05,因此認為兩者有顯著性差異"
.format
(w1.pvalue)
)else
:print
("貝葉斯與決策樹的p=>=0.05,因此認為兩者無顯著性差異"
.format
(w1.pvalue)
)#貝葉斯與k近鄰
w2=stats.wilcoxon(pred_knn,pred_bayes,correction=
true
,alternative=
'greater'
,zero_method=
'zsplit')if
(w2.pvalue<
0.05):
print
("貝葉斯與k近鄰的p=<0.05,因此認為兩者有顯著性差異"
.format
(w2.pvalue)
)else
:print
("貝葉斯與k近鄰的p=>=0.05,因此認為兩者無顯著性差異"
.format
(w2.pvalue)
)#決策樹與k近鄰
w3=stats.wilcoxon(pred_knn,pred_tree,correction=
true
,alternative=
'greater')if
(w3.pvalue<
0.05):
print
("決策樹與k近鄰的p=<0.05,因此認為兩者有顯著性差異"
.format
(w3.pvalue)
)else
:print
("決策樹與k近鄰的p=>=0.05,因此認為兩者無顯著性差異"
.format
(w3.pvalue)
)
樸素貝葉斯
樸素貝葉斯演算法是一種基於概率統計的分類方法,它主要利用貝葉斯公式對樣本事件求概率,通過概率進行分類。以下先對貝葉斯公式做個了解。對於事件a b,若p b 0,則事件a在事件b發生的條件下發生的概率為 p a b p a b p b 將條件概率稍作轉化即可得到貝葉斯公式如下 p a b p b a ...
樸素貝葉斯
1.準備資料 從文字中構建詞向量 2.訓練演算法 從詞向量計算概率 3.測試演算法 儲存為 bayes.py 檔案 參考 coding utf 8 from numpy import 文字轉化為詞向量 def loaddataset postinglist my dog has flea probl...
樸素貝葉斯
機器學習是將資料轉化為決策面的過程 scikit learn縮寫為sklearn 訓練乙個分類器,學習之後 其處理的準確性 def nbaccuracy features train,labels train,features test,labels test from sklearn.bayes ...