python代碼實現回歸分析--線性回歸
#概念篇:
#一下是我自己結合課件理解的,如果理解的有問題,期望看到的人能夠好心告訴我一下,我將感激不盡~
#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))