線性回歸-(最小二乘法解方程組,擬合)


一.線性回歸(損失函數為最小二乘法)

 

 

 

 

 

 

 

 

 

如何去求模型中的權重w,使得損失loss最小? (目的是找到最小損失對應的w值)

 

 

 

 

 

 

 

 

sklearn 回歸性能評估API:

sklearn.metrics.mean_squared_error

 

 

 

 

 

數組相乘與矩陣相乘的演示: 

 

 波士頓房價預測

 

 

 

 

 

 

 

 

 

作業:自主編寫線性回歸算法 ,數據可以自己造,或者從網上獲取。

#運用線性回歸算法預測波士頓房價
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
data = load_boston()
data_all = data['data']
x = data_all[:, 5:6]
y = data['target']
model_LR = LinearRegression()
model_LR.fit(x,y)
pre = model_LR.predict(x)
print('模型的權值:',model_LR.coef_,'模型的截距項:',model_LR.intercept_)
print('模型的預測值為:',pre)
#使用可視化的方式對比擬合出的線性回歸方程與真實房價的分布情況
plt.scatter(x,y,c='skyblue')  #真實房價的分布(散點圖)
plt.plot(x,pre,c='pink')  #擬合出的線性回歸方程
plt.legend(['real','pre'])
plt.show()

  運行結果:

 

 

 

 

例2: 簡單的線性回歸

 

 

 

 

二.邏輯回歸(損失函數似然函數)

 

 

 

 

 

 

 

 

 

sklearn 邏輯回歸API

sklearn,linear_modle.LogisticRegressionI

 

作業:邏輯回歸實踐

我這次選擇的實踐是,利用邏輯回歸 依據各種屬性數據預測乳腺癌的患病情況。

數據應用的是UCI的  威斯康星州(診斷)數據 ,並給它添加了標簽。(一共570條數據)。

 

 

其屬性信息為:

1)ID號 
2)診斷(M =惡性,B =良性) 
3-32) 

為每個細胞核計算十個實值特征: 

a)半徑(中心到周長上各點的距離的平均值) 
b)紋理(灰度值的標准偏差) 
c)周長 
d)面積 
e)光滑度(半徑長度的局部變化) 
f)緊湊度(周長^ 2 /面積-1.0) 
g)凹度(輪廓凹部的嚴重程度) 
h )凹點(輪廓的凹入部分的數量) 
i)對稱性 
j)分形維數(“海岸線近似”-1)

實驗代碼:

from sklearn.model_selection import train_test_split  # 划分數據集
from sklearn.linear_model import LogisticRegression  # 邏輯回歸
from sklearn.metrics import classification_report
from sklearn.preprocessing import StandardScaler  # 標准化處理
#導入基礎的庫
import pandas as pd

data = pd.read_csv(r'D:\shujvji\aizhenghuanzhe1.csv', encoding='utf-8')  #讀取csv數據
#data.head(3)
x_data = data.iloc[:, 2:10]
y_data = data.iloc[:, 1]
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.3)  #划分測試集占整體30%
#進行標准化處理
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
#建模
mylg = LogisticRegression()  #應用邏輯回歸算法
mylg.fit(x_train, y_train)  #用邏輯回歸構建模型
print('模型參數:\n', mylg.coef_)    #其結果代表θ,以矩陣方式呈現
mylg_predict = mylg.predict(x_test)    #預測
target_names = ['M', 'B']
print('准確率:\n', mylg.score(x_test, y_test))
print('召回率:\n', classification_report(y_test, mylg_predict, target_names=target_names))

  模型參數:

 

 模型准確率:

 

 召回率和預測精度

 

 

 

 

 

 

 

 

 


免責聲明!

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



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