python3 學習api的使用
git: https://github.com/linyi0604/MachineLearning
代碼:
1 from sklearn.datasets import load_boston 2 from sklearn.cross_validation import train_test_split 3 from sklearn.preprocessing import StandardScaler 4 from sklearn.tree import DecisionTreeRegressor 5 from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error 6 import numpy as np 7 8 ''' 9 回歸樹: 10 嚴格上說 回歸樹不能算是回歸 11 葉子節點是一團訓練數據的均值 不是連續 具體的預測值 12 13 解決特征非線性的問題 14 不要求特征標准化和統一量化 15 16 容易過於復雜喪失泛化能力 17 穩定性較差,細微改變會導致樹結構發生重大變化 18 19 ''' 20 21 # 1 准備數據 22 # 讀取波士頓地區房價信息 23 boston = load_boston() 24 # 查看數據描述 25 # print(boston.DESCR) # 共506條波士頓地區房價信息,每條13項數值特征描述和目標房價 26 # 查看數據的差異情況 27 # print("最大房價:", np.max(boston.target)) # 50 28 # print("最小房價:",np.min(boston.target)) # 5 29 # print("平均房價:", np.mean(boston.target)) # 22.532806324110677 30 31 x = boston.data 32 y = boston.target 33 34 # 2 分割訓練數據和測試數據 35 # 隨機采樣25%作為測試 75%作為訓練 36 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=33) 37 38 39 # 3 訓練數據和測試數據進行標准化處理 40 ss_x = StandardScaler() 41 x_train = ss_x.fit_transform(x_train) 42 x_test = ss_x.transform(x_test) 43 44 ss_y = StandardScaler() 45 y_train = ss_y.fit_transform(y_train.reshape(-1, 1)) 46 y_test = ss_y.transform(y_test.reshape(-1, 1)) 47 48 # 4 使用回歸樹進行訓練和預測 49 # 初始化k近鄰回歸模型 使用平均回歸進行預測 50 dtr = DecisionTreeRegressor() 51 # 訓練 52 dtr.fit(x_train, y_train) 53 # 預測 保存預測結果 54 dtr_y_predict = dtr.predict(x_test) 55 56 # 5 模型評估 57 print("回歸樹的默認評估值為:", dtr.score(x_test, y_test)) 58 print("平回歸樹的R_squared值為:", r2_score(y_test, dtr_y_predict)) 59 print("回歸樹的均方誤差為:", mean_squared_error(ss_y.inverse_transform(y_test), 60 ss_y.inverse_transform(dtr_y_predict))) 61 print("回歸樹的平均絕對誤差為:", mean_absolute_error(ss_y.inverse_transform(y_test), 62 ss_y.inverse_transform(dtr_y_predict))) 63 64 ''' 65 回歸樹的默認評估值為: 0.7066505912533438 66 平回歸樹的R_squared值為: 0.7066505912533438 67 回歸樹的均方誤差為: 22.746692913385836 68 回歸樹的平均絕對誤差為: 3.08740157480315 69 '''