by28777換哪了 by28777( 三 )


print('系數', clf.coef_)print('截距', clf.intercept_)print('評分函數', clf.score(X, Y))'''系數 [[ 0.62402912]]截距 [-173.70433885]評分函數 0.911831188777'''

by28777換哪了  by28777

文章插圖
該直線對應的回歸函數為:y = 0.62402912 * x - 173.70433885 , 則X2[1]=400這個點預測的利潤值為75.9 , 而X1中成本為400元對應的真實利潤是80元 , 預測是基本準確的 。
2.線性回歸預測糖尿病(1).糖尿病數據集Sklearn機器學習包提供了糖尿病數據集(Diabetes Dataset) , 該數據集主要包括442行數據 , 10個特征值 , 分別是:年齡(Age)、性別(Sex)、體質指數(Body mass index)、平均血壓(Average Blood Pressure)、S1~S6一年后疾病級數指標 。預測指標為Target , 它表示一年后患疾病的定量指標 。原網址的描述如圖4所示:
by28777換哪了  by28777

文章插圖
下面代碼進行簡單的調用及數據規模的測試 。
# -*- coding: utf-8 -*-# By:Eastmount CSDN 2021-07-03from sklearn import datasetsdiabetes = datasets.load_diabetes() #載入數據print(diabetes.data) #數據print(diabetes.target) #類標print('總行數: ', len(diabetes.data), len(diabetes.target))print('特征數: ', len(diabetes.data[0])) #每行數據集維數print('數據類型: ', diabetes.data.shape)print(type(diabetes.data), type(diabetes.target))
調用load_diabetes()函數載入糖尿病數據集 , 然后輸出其數據data和類標target 。輸出總行數442行 , 特征數共10個 , 類型為(442L, 10L) 。其輸出如下所示:
[[ 0.03807591 0.05068012 0.06169621 ..., -0.00259226 0.01990842-0.01764613][-0.00188202 -0.04464164 -0.05147406 ..., -0.03949338 -0.06832974-0.09220405]...[-0.04547248 -0.04464164 -0.0730303 ..., -0.03949338 -0.004219860.00306441]][ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310. 101....64. 48. 178. 104. 132. 220. 57.]總行數: 442 442特征數: 10數據類型: (442L, 10L)<type 'numpy.ndarray'> <type 'numpy.ndarray'>
(2).代碼實現現在我們將糖尿病數據集劃分為訓練集和測試集 , 整個數據集共442行 , 我們取前422行數據用來線性回歸模型訓練 , 后20行數據用來預測 。其中取預測數據的代碼為diabetes_x_temp[-20:] , 表示從后20行開始取值 , 直到數組結束 , 共取值20個數 。
整個數據集共10個特征值 , 為了方便可視化畫圖我們只獲取其中一個特征進行實驗 , 這也可以繪制圖形 , 而真實分析中 , 通常經過降維處理再繪制圖形 。這里獲取第3個特征 , 對應代碼為:diabetes_x_temp = diabetes.data[:, np.newaxis, 2] 。完整代碼如下:
# -*- coding: utf-8 -*-# By:Eastmount CSDN 2021-07-03from sklearn import datasetsimport matplotlib.pyplot as pltfrom sklearn import linear_modelimport numpy as np#數據集劃分diabetes = datasets.load_diabetes() #載入數據diabetes_x_temp = diabetes.data[:, np.newaxis, 2] #獲取其中一個特征diabetes_x_train = diabetes_x_temp[:-20] #訓練樣本diabetes_x_test = diabetes_x_temp[-20:] #測試樣本 后20行diabetes_y_train = diabetes.target[:-20] #訓練標記diabetes_y_test = diabetes.target[-20:] #預測對比標記#回歸訓練及預測clf = linear_model.LinearRegression()clf.fit(diabetes_x_train, diabetes_y_train) #訓練數據集pre = clf.predict(diabetes_x_test)#繪圖plt.title(u'LinearRegression Diabetes') #標題plt.xlabel(u'Attributes') #x軸坐標plt.ylabel(u'Measure of disease') #y軸坐標plt.scatter(diabetes_x_test, diabetes_y_test, color = 'black') #散點圖plt.plot(diabetes_x_test, pre, color='blue', linewidth = 2) #預測直線plt.show()
輸出結果如圖5所示 , 每個點表示真實的值 , 而直線表示預測的結果 。
by28777換哪了  by28777

文章插圖
(3).代碼優化下面代碼增加了幾個優化措施 , 包括增加了斜率、 截距的計算 , 可視化繪圖增加了散點到線性方程的距離線 , 增加了保存圖片設置像素代碼等 。這些優化都更好地幫助我們分析真實的數據集 。
# -*- coding: utf-8 -*-# By:Eastmount CSDN 2021-07-03from sklearn import datasetsimport numpy as npfrom sklearn import linear_modelimport matplotlib.pyplot as plt#之一步 數據集劃分d = datasets.load_diabetes() #數據 10*442x = d.datax_one = x[:,np.newaxis, 2] #獲取一個特征 第3列數據y = d.target #獲取的正確結果x_train = x_one[:-42] #訓練集X [ 0:400]x_test = x_one[-42:] #預測集X [401:442]y_train = y[:-42] #訓練集Y [ 0:400]y_test = y[-42:] #預測集Y [401:442]#第二步 線性回歸實現clf = linear_model.LinearRegression()print(clf)clf.fit(x_train, y_train)pre = clf.predict(x_test)print('預測結果', pre)print('真實結果', y_test)#第三步 評價結果cost = np.mean(y_test-pre)**2 #2次方print('平方和計算:', cost)print('系數', clf.coef_)print('截距', clf.intercept_)print('方差', clf.score(x_test, y_test))#第四步 繪圖plt.plot(x_test, y_test, 'k.') #散點圖plt.plot(x_test, pre, 'g-') #預測回歸直線#繪制點到直線距離for idx, m in enumerate(x_test):plt.plot([m, m],[y_test[idx], pre[idx]], 'r-')plt.savefig('blog12-01.png', dpi=300) #保存圖片plt.show()

推薦閱讀