[scikit-learn 机器学习] 8. 非线性分类和决策树
生活随笔
收集整理的這篇文章主要介紹了
[scikit-learn 机器学习] 8. 非线性分类和决策树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 特征選擇標準
- 2. 網頁廣告預測
- 2.1 數量處理
- 2.2 網格搜索模型參數
- 3. 決策樹優缺點
本文為 scikit-learn機器學習(第2版)學習筆記
相關知識:《統計學習方法》決策樹(Decision Tree,DT)
1. 特征選擇標準
- 信息增益,得知特征X的信息而使得類Y的信息的不確定性減少的程度。
- 信息增益比,信息增益的占比,選擇大的特征
- 基尼系數,表示經特征 A 分割后集合 D 的不確定性,選擇基尼系數小的特征
2. 網頁廣告預測
import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCVdf = pd.read_csv('./ad.data', header=None) df.head(10)
數據前3列為廣告圖片的寬高、長寬比,余下特征為文字變量出現頻率的編碼特征
最后一列為標簽列,是否為廣告
2.1 數量處理
- 分離標簽
- 特征提取
- 填補?無效數據
2.2 網格搜索模型參數
X_train, X_test, y_train, y_test = train_test_split(X, y)pipeline = Pipeline([('clf', DecisionTreeClassifier(criterion='entropy')) ]) parameters = {'clf__max_depth': (150, 155, 160),'clf__min_samples_split': (2, 3),'clf__min_samples_leaf': (1, 2, 3) }grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=1, scoring='f1') grid_search.fit(X_train, y_train)best_parameters = grid_search.best_estimator_.get_params() print('Best score: %0.3f' % grid_search.best_score_) print('Best parameters set:') for param_name in sorted(parameters.keys()):print('t%s: %r' % (param_name, best_parameters[param_name]))predictions = grid_search.predict(X_test) print(classification_report(y_test, predictions)) Best score: 0.890 Best parameters set: tclf__max_depth: 155 tclf__min_samples_leaf: 2 tclf__min_samples_split: 2precision recall f1-score support0 0.97 0.99 0.98 7161 0.94 0.82 0.88 104accuracy 0.97 820macro avg 0.96 0.91 0.93 820 weighted avg 0.97 0.97 0.97 820看見廣告類1的,精準率和召回率都還不錯。
3. 決策樹優缺點
優點:
- 不要求對數據進行標準化
- 可以進行多元分類而無需使用OvO,OvA等策略
缺點:
- 更容易過擬合,需要剪枝(設置樹的最大深度、節點實例數量超過閾值才建立子節點)
- 本質上是貪心算法,不保證全局最優
總結
以上是生活随笔為你收集整理的[scikit-learn 机器学习] 8. 非线性分类和决策树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 531. 孤独像素 I
- 下一篇: LeetCode 573. 松鼠模拟(数