python程式碼實現迴歸分析--線性迴歸
python程式碼實現迴歸分析--線性迴歸
Aming 科技愛好者#概念篇:
#一下是我自己結合課件理解的,如果理解的有問題,期望看到的人能夠好心告訴我一下,我將感激不盡~
#1.什麼資料建模? 通過原有資料找到其中的規律,並總結成模型.
#2.什麼是模型概念? 通過規律總結的模型,來預測自變數的結果(因變數).
#3.什麼是迴歸分析? 是用來解釋自變數和因變數之間關係的一種方法.
#4.什麼是線性迴歸? 迴歸分析的一種,評估自變數和因變數是一種線性關係的的一種方法.
#5. 什麼是一元線性迴歸? 就是自變數只有一個的線性迴歸(影響元素只有一種).
#6. 什麼是多元線性迴歸? 就是自變數是多個的線性迴歸(影響元素不止一種).
#7. 什麼是擬合? 迴歸分析的具體實現方式(構建出最能串聯現實實際情況的演算法公式)
#8. 什麼是模型引數? 就是能夠解釋自變數和因變數關係的引數.
#程式碼表示篇:
#一元線性迴歸程式:
#1.基本工具匯入.
import numpy as np
#調科學計算包中線性模組裡的線性迴歸函式
from sklearn.linear_model import LinearRegression
#條用科學計算包中的方法選擇模組裡的用於切分測試集和訓練集的函式.
from sklearn.model_selection import train_test_split
#2.建造資料
#隨機數種子,事先設定之後,就能固定值隨機數.
#PS:0可以理解成這組隨機數的編號,只要在下邊填寫同樣編號得到的數值是同一組隨機數數值.
np.random.seed(0)
#從-10到10之間的100個等差數列(屬於連續性陣列)
x = np.linspace(-10,10,100)
#設定一個線性迴歸公式
y = 0.85*x - 0.72
#建立一組數量為100,均值為0,標準差為0.5的隨機陣列.
e = np.random.normal(loc = 0,scale = 0.5,size = x.shape)
#將變數y加上這個變數e
y += e
#將x轉換為二維陣列,因為fit方法要求x為二維結構.
x= x.reshape(-1,1)
lr = LinearRegression()
#x:被劃分的特徵集,y:被劃分的標籤,test_size:樣本的佔比(如果是整數表示樣本的數量),random_state:隨機數種子編號
X_train,X_test,y_train,y_test = train_test_split(x,y,test_size = 0.25,random_state=0)
#擬合數據函式:
lr.fit(X_train,y_train)
#擬合後可利用lr.coef和lr.intercept取出(w))權重和(b))截距.
print('權重',lr.coef_)
print('截距',lr.intercept_)
#從訓練集學習到了模型的引數(w與b),確定方程,就可以進行預測了.
#定義一個預測函式
y_hat = lr.predict(X_test)
#比對一下預測的y值與實際y值
print("實際值:",y_test.ravel()[:10])
print("預測值:",y_hat[:10])
import matplotlib as mpl
import matplotlib.pyplot as plt
#畫布初始設定:
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] =False
#將訓練集和測試集用散點形式表現
plt.scatter(X_train,y_train,s = 15,label = '訓練集')
plt.scatter(X_test,y_test,s = 15,label = '測試集')
#將預測結果用直線畫出
plt.plot(x,lr.predict(x),"r-")
#顯示說明
plt.legend()
#用圖標表示出真實值與預測值
plt.figure(figsize = (15,5))
plt.plot(y_test,label = "真實值",color = "r",marker = "o")
plt.plot(y_hat,label = "預測值",color = "g",marker = "o")
plt.xlabel("測試集資料序號")
plt.ylabel("資料值")
plt.legend()
#線性迴歸模型評估
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
print("平均方誤差(MSE):",mean_squared_error(y_test,y_hat))
print("根均方誤差( RMSE):",mean_absolute_error(y_test,y_hat))
print("平均絕對值誤差(MAE):",r2_score(y_test,y_hat))
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
#make_regression 用來生成樣本資料,用於迴歸模型
from sklearn.datasets import make_regression
# n_sampless:生成樣本個體的數量
#n_features: 特徵數量(x的數量)
#bias:偏置值.
#random_state :隨機種子
#noise:噪音
#生成線性迴歸的樣本資料
# n_sampless:生成樣本個體的數量
#n_features: 特徵數量(x的數量)
#coef: 是否返回權重.ture 返回,false不返回
#bias:偏置值.
#random_state :隨機種子
X,y,coef = make_regression(n_samples=1000,n_features=2,coef=True,bias=5.5,random_state=0)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.25,random_state=0)
print("實際權重:",coef)
lr = LinearRegression()
lr.fit(X_train,y_train)
print("模型權重:",lr.coef_)
print("截距:",lr.intercept_)
y_hat = lr.predict(X_test)
print("均方誤差:",mean_absolute_error(y_test,y_hat))
print("訓練集R~2:",lr.score(X_train,y_train))
print("訓練集R~2:",lr.score(X_test,y_test))