現在我們來用一些方法進一步提高準確率。
fromsklearn.pipelineimportpipelinefromsklearn.decompositionimportpca
fromsklearn.grid_searchimportgridsearchcv
#利用主成分分析嘗試提高準確率
#n_components為最終的特徵維度
pca = pca(n_components=15)
clf = decisiontreeclassifier(random_state=14)
x_pca = pca.fit_transform(x)
scores = cross_val_score(clf,x_pca,y,scoring='accuracy')
print("accuracy:%".format(np.mean(scores)*100)) #accuracy:93.6%
利用主成分分析,我們將準確率提高了0.3個百分點。這裡我們認為設定n_components=15。並不一定是較好的引數。接下來我們繼續優化。
#利用網格搜尋來調整引數
pca = pca()
clf = decisiontreeclassifier(
random_state=14
)pipe = pipeline([
('pca',pca),
('clf',clf)
])grid_param=
grid = gridsearchcv(pipe,grid_param)
grid.fit(x,y)
(grid.best_params_)
("accuracy:%".format(grid.best_score_*
100))
#best_params_:,accuracy:94.9%
利用網格搜尋,我們得到了最優引數n_components=16,準確率提高到94.9%,較優化前提高了1.6個百分點。
試試繼續優化模型。#嘗試簡單的特徵工程來提高準確率
fromsklearn.pipeline
importfeatureunion
fromsklearn.feature_selection
importselectkbest,chi2
pca = pca()
selection = selectkbest(
score_func
=chi2)
combined_features = featureunion([
('pca',pca),
('univ_select',selection)
])clf = decisiontreeclassifier(
random_state=14
)pipe = pipeline([
('feature',combined_features),
('clf',clf)
])grid_param =
grid = gridsearchcv(pipe,grid_param)
grid.fit(x,y)
(grid.best_params_)
("accuracy:%".format(
100*grid.best_score_))
這裡我們採用兩種方法來處理原始資料:pca和selectkbest。selectkbest可以從原始資料中選擇k個重要特徵,評估分數為chi2,即卡方檢驗。
然後用featureunion合併特徵。
最終我們得到了95.6%的準確率。
通過優化,單棵樹的準確率達到了95.6%,已經相當不錯。後續我們將利用整合模型來進一步提高準確率。accuracy:95.6%
決策樹模型
決策樹採用樹結構來進行決策的,可以認為是if then規則集合,也可以認為是對特徵空間劃分,每個子空間對應乙個輸出。其優點簡單,快速,可解釋性強。決策樹通常包含三部分 特徵選擇,決策樹生成,決策樹剪枝。資訊增益,資訊增益比,基尼指數是常用的特徵選擇準則 資訊熵 表示變數的不確定程度,資訊熵越大不確定...
決策樹模型
前言 決策樹生成模型三要素 一般而言,一顆 完全生長 的決策樹包含 特徵選擇 決策樹構建 剪枝三個過程。決策樹是一種啟發式貪心演算法,每次選取的分割資料的特徵是當前的最佳選擇,並不關心是否達到最優。一 特徵選擇 1.1 熵 樣本集合 純度 不確定性 穩定性的指標 熵越大,樣本的不確定性就越大 在決策...
決策樹模型
決策樹可以簡單的理解為根據特徵的取值而最終分成不同的類,也可以理解為簡單的if then的規則集合 樹嘛 那麼怎麼樣選擇節點是乙個很有技術的問題。為什麼呢,因為如果你的中間節點擊的不錯是不是就能夠很容易的將決策樹的各個節點很容易的分清楚了 說白了,你選的樹分叉的地方越有區分度 分類越多越好你乙個特徵...