首先我們在每次寫代碼的時候,先理清思路,知道每一步在干什么:
那么我們今天要用決策樹來預測波士頓的房價那么我們首先需要的就是波士頓的數據
那么這個數據我們有兩種方式可以進行測試,
1》可以從網上找到一個csv文件或者別的都可以
2》導包 from sklearn import datasets 在sklearn中自帶數據,相對來書這個方法比較方便一點
博主用的是第二種方法
那么我們開始理清思路:
1》加載數據
這里我們的數據已經加載完畢,現在我們開始進行第二步:
2》分割數據集,分為訓練集和測試集,一般我們的訓練集和測試集都是2 8 分,訓練集為8 測試集為2
這里我們用了train_test_split()這個函數,這個函數有四個參數,第一個是導入的數據中x軸的數據,第二個是y軸的數據
第三個參數是測試集一共分多少比例,這里博主分為2份
3》既然我們的數據准備好了,那么我們就開始簡單的做一個模型
其中我們先導入決策樹的包, from sklearn.tree import DecisionTreeRegressor
導入后,我們首先初始化模型,並且將我們之前分割好的數據放到模型中進行訓練,
之前訓練模型是,train_X這個是訓練模型test_X是測試集的模型
現在講訓練集的數據放到模型中,這里面模型怎么訓練的,或者模型是什么樣子,我們不需要考慮
這不是我們考慮的,這些是底層復制的,我們復制怎么使用
現在模型訓練完畢,可以預測模型是否准確,並且得分是什么情況
利用模型的名字.predict(test_X) 根據測試集的數據進行測試
然后打印分數
這個分數算穩定的分數,但是如果我們的誤差很大,R2得分不高,我們怎么辦吶?
開始決策樹的優化:
優化有兩個方法:
1》一般的,可以先從數據集上優化
2》是使用AdaBoost算法來增強模型的准確
但是由於本項目是比較成熟的項目,那第一種方法意義不大
這里采用第二種方法
AdaBoost的做法(以分類原理舉例)
提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。
加權多數表決的方法,加大分類誤差率小的弱分類器的權值,使其在表決中起較大作用,減小分類誤差率大
的弱分類器的權值,使其在表決中起較小的作用。
其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強
的最終分類器(強分類器)
scikit-learn中Adaboost類庫比較直接,就是AdaBoostClassifier和AdaBoostRegressor兩個 。
整個過程如下所示(以分類原理舉例)
1. 先通過對 N 個訓練樣本的學習得到第一個弱分類器 ;
2. 將分錯的樣本和其他的新數據一起構成一個新的N 個的訓練樣本,通過對這個樣本的學習得到第二個弱分類
器;
3. 將 和 都分錯了的樣本加上其他的新樣本構成另一個新的 N個的訓練樣本,通過對這個樣本的學習得到第三個
弱分類器;
4. 如此反復,最終得到經過提升的強分類器。
運行進行對比:
第一個是優化后,第二個是優化前,有明顯的變化,這里這個demo就搞定了