基於sklearn的波士頓房價預測_線性回歸學習筆記


>  以下內容是我在學習https://blog.csdn.net/mingxiaod/article/details/85938251 教程時遇到不懂的問題自己查詢並理解的筆記,由於sklearn版本更迭改動了原作者的代碼,如有理解偏差歡迎指正。

 1. np.linspace  

    np.linspace(1,10) 在numpy中生成一個等差數列,可以加三個參數,np.linspace(1,10,10)在是兩個參數時默認生成五十個數字的等差數列,第一第二哥數字分別代表數列的開頭和結尾,如果是三哥參數,第三個參數代表等差數列的長度,既可以生成一個長度為10數字開頭為1結尾為10的等差數列(1,2,3,4,5,6,7,8,9,10)

  2. plt.subplot(nrows, ncols, index, **kwargs)

    plt.subploy(2,3,5)這個代碼的核心意思就是使用”整數來描述子圖的位置信息“,顧名思義就是在一個畫布中畫多個圖片,第一個參數nrows代表你把畫布分為多少行,ncols代表你把畫布分為多少列,index就更好理解了,它的意思就是接下來要畫的圖的索引位置,比如(2,3,5)他代表的意思就是把一張空白的畫布分為兩行,三列。六個位置區域,第三個索引參數一般就是從左上角開始到右下角依次編號(如下圖),我查閱資料的時候有的博主強行機器翻譯官方文檔,並注明第三個參數不能大於10,其實不然,官方的意思是index<= nrows*ncols,也就是索引數字不能大於已有的畫布分割數量。還有就是(2,3,5)與(235)效果等同,至於第三個參數**kwargs,作用是設置子圖類型,極點圖或線型圖。

 

 

   3.np.delete(x_data,abnormal_data,axis = 0)

    第一個參數代表要處理的數據矩陣,第二個參數代表在什么位置處理(一般為一維數組),第三個參數 0 代表刪除所在列,1代表刪除所在行。

 1 from sklearn import preprocessing
 2 from sklearn.datasets import load_boston
 3 from sklearn.metrics import r2_score
 4 from sklearn.linear_model import LinearRegression
 5 from sklearn.model_selection import train_test_split
 6 import matplotlib.pyplot as plt
 7 import numpy as np
 8 
 9 #數據初始化
10 dataset = load_boston()
11 x_data,y_data=load_boston(return_X_y = True) #導入數據,x_data為特征變量、y_data為目標值
12 print("--------------'''獲取自變量數據的形狀'''--------------")
13 print(x_data.shape)
14 print(y_data.shape)
15 name_data = dataset.feature_names #導入特證名
16 
17 #數據可視化
18 for i in range(len(name_data)):
19     plt.scatter(x_data[:,i],y_data,s = 20,marker = '<',c = 'r')
20     plt.title(name_data[i])
21     plt.show()
22 #處理異常數據
23 abnormal_data = []
24 for i in range(len(y_data)):
25     if y_data[i] == 50:
26         abnormal_data.append(i)#存儲異常值的下標;
27 x_data = np.delete(x_data,abnormal_data,axis = 0)#刪除值為y值為50的特征變量所在行
28 y_data = np.delete(y_data,abnormal_data,axis = 0)#刪除值為y值為50的特征值所在行
29 print("------檢測-------")
30 print(x_data.shape)
31 print(y_data.shape)
32 
33 abnormal_title = []
34 for i in range(len(name_data)):
35     if name_data[i] == 'RM' or name_data[i] =='PTRATIO'or name_data[i] == 'LSTAT':
36         continue
37     else:
38         abnormal_title.append(i)#存儲不相關數據特證名下標
39 x_data = np.delete(x_data,abnormal_title,axis = 1)#刪除不相關數據所在列
40 print("--------------'''輸出有效數據形狀'''--------------")
41 print(x_data.shape)
42 print(y_data.shape)
43 
44 #數據分割
45 x_train,x_test = train_test_split(x_data,test_size=0.2,random_state=0)
46 y_train,y_test = train_test_split(y_data,test_size=0.2,random_state=0)
47 print("--------------'''輸出實驗數據長度'''--------------")
48 print(len(x_train))
49 print(len(x_test))
50 print(len(y_train))
51 print(len(y_test))
52 
53 #數據歸一化(無量綱化處理β=(x-min(x))/max(x)-min(x),將數據歸集到0~1之間)
54 min_max_scaler = preprocessing.MinMaxScaler()
55 x_test = min_max_scaler.fit_transform(x_test)
56 x_train = min_max_scaler.fit_transform(x_train)
57 y_train = min_max_scaler.fit_transform(y_train.reshape(-1,1))
58 y_test = min_max_scaler.fit_transform(y_test.reshape(-1,1))#轉化為一列行自動確認
59 #模型訓練和評估
60 lr = LinearRegression()
61 lr.fit(x_train,y_train)
62 lr_y_predict = lr.predict(x_test)
63 #使用r2_score預測樣本
64 score = r2_score(y_test, lr_y_predict)
65 print("樣本預測得分:{}".format(score))

輸出結果:

--------------'''獲取自變量數據的形狀'''--------------
(506, 13)
(506,)
------檢測-------
(490, 13)
(490,)
--------------'''輸出有效數據形狀'''--------------
(490, 3)
(490,)
--------------'''輸出實驗數據長度'''--------------
392
98
392
98
樣本預測得分:0.7091901425426

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM