数学建模:1.概述 监督学习--回归分析模型
數(shù)學(xué)建模概述
監(jiān)督學(xué)習(xí)-回歸分析(線性回歸)
監(jiān)督學(xué)習(xí)-分類(lèi)分析(KNN最鄰近分類(lèi))
非監(jiān)督學(xué)習(xí)-聚類(lèi)(PCA主成分分析& K-means聚類(lèi))
隨機(jī)算法-蒙特卡洛算法
?
1.回歸分析
在統(tǒng)計(jì)學(xué)中,回歸分析(regression analysis)指的是確定兩種或兩種以上變量間互相依賴(lài)的定量關(guān)系的一種統(tǒng)計(jì)分析方法。
按照自變量和因變量之間的關(guān)系類(lèi)型,可分為線性回歸分析和非線性回歸分析。
?
?
?
?
2.線性回歸的python實(shí)現(xiàn)
?線性回歸的python實(shí)現(xiàn)方法
?線性回歸通常是人們?cè)趯W(xué)習(xí)預(yù)測(cè)模型時(shí)首選的技術(shù)之一。在這種技術(shù)中,因變量是連續(xù)的,自變量可以是連續(xù)的也可以是離散的,回歸線的性質(zhì)是線性的。
?線性回歸使用最佳的擬合直線(也就是回歸線)在因變量(Y)和一個(gè)或多個(gè)自變量(X)之間建立一種關(guān)系。
?簡(jiǎn)單線性回歸 / 多元線性回歸
?2.1 簡(jiǎn)單線性回歸 (一元線性回歸)
(1)示例
?創(chuàng)建線性回歸模型:
model = LinearRegression()model.fit(xtrain[:, np.newaxis], ytrain)
model.coef_斜率的參數(shù) 、 model.intercept_ 截距的參數(shù) 擬合測(cè)試:
xtest = np.linspace(0, 10, 1000) #測(cè)試值、根據(jù)擬合曲線求出 ytest = model.predict(xtest[:, np.newaxis]) import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline # 簡(jiǎn)單線性回歸(一元線性回歸) # (1)數(shù)據(jù)示例from sklearn.linear_model import LinearRegression # 導(dǎo)入線性回歸模塊 rng = np.random.RandomState(1) #選擇隨機(jī)數(shù)里邊的種子1 xtrain = 10 * rng.rand(30) ytrain = 8 + 4 * xtrain + rng.rand(30) # np.random.RandomState → 隨機(jī)數(shù)種子,對(duì)于一個(gè)隨機(jī)數(shù)發(fā)生器,只要該種子(seed)相同,產(chǎn)生的隨機(jī)數(shù)序列就是相同的 # 生成隨機(jī)數(shù)據(jù)x與y # 樣本關(guān)系:y = 8 + 4*x fig = plt.figure(figsize =(12,3)) ax1 = fig.add_subplot(1,2,1) plt.scatter(xtrain,ytrain,marker = '.',color = 'k') plt.grid() plt.title('樣本數(shù)據(jù)散點(diǎn)圖') # 生成散點(diǎn)圖 model = LinearRegression() #創(chuàng)建線性回歸模型 model.fit(xtrain[:, np.newaxis], ytrain) #填上值自變量和因變量,如果是多元線性回歸自變量給它個(gè)矩陣就可以了,model.fit(xtrain, ytrain)這樣子是不行的,要把它轉(zhuǎn)置為列的值, # xtrain.shape #(30,) # xtrain[:, np.newaxis] #預(yù)測(cè)結(jié)果就會(huì)放到這個(gè)model里邊 # LinearRegression → 線性回歸評(píng)估器,用于擬合數(shù)據(jù)得到擬合直線 # model.fit(x,y) → 擬合直線,參數(shù)分別為x與y # x[:,np.newaxis] → 將數(shù)組變成(n,1)形狀 把xtrain數(shù)組變成列排布(30,1)#print(model.coef_) #[ 4.00448414]斜率的參數(shù) #print(model.intercept_) #8.44765949943截距的參數(shù) xtest = np.linspace(0, 10, 1000) #測(cè)試值 ytest = model.predict(xtest[:, np.newaxis]) # 創(chuàng)建測(cè)試數(shù)據(jù)xtest,并根據(jù)擬合曲線求出ytest # model.predict → 預(yù)測(cè) ax2 = fig.add_subplot(1, 2, 2) plt.scatter(xtrain, ytrain, marker = '.', color = 'k') plt.plot(xtest, ytest, color = 'r') plt.grid() plt.title('線性回歸擬合') # 繪制散點(diǎn)圖、線性回歸擬合直線
(2)誤差
# 簡(jiǎn)單線性回歸(一元線性回歸) # (2)誤差 rng = np.random.RandomState(8) xtrain = 10 * rng.rand(15) ytrain = 8 + 4 * xtrain + rng.rand(15) * 30 model.fit(xtrain[:,np.newaxis],ytrain) xtest = np.linspace(0,10,1000) ytest = model.predict(xtest[:,np.newaxis]) # 創(chuàng)建樣本數(shù)據(jù)并進(jìn)行擬合 plt.plot(xtest,ytest,color = 'r',linestyle = '--') # 擬合直線 plt.scatter(xtrain,ytrain,marker = '.',color = 'k') # 樣本數(shù)據(jù)散點(diǎn)圖 ytest2 = model.predict(xtrain[:,np.newaxis]) # 樣本數(shù)據(jù)x在擬合直線上的y值 plt.scatter(xtrain,ytest2,marker = 'x',color = 'g') # ytest2散點(diǎn)圖 plt.plot([xtrain,xtrain],[ytrain,ytest2],color = 'gray') # 誤差線 plt.grid() plt.title('誤差') # 繪制圖表?
(3)求解a,b
# 簡(jiǎn)單線性回歸(一元線性回歸) # (3)求解a,b rng = np.random.RandomState(1) xtrain = 10 * rng.rand(30) ytrain = 8 + 4 * xtrain + rng.rand(30) # 創(chuàng)建數(shù)據(jù) model = LinearRegression() model.fit(xtrain[:,np.newaxis],ytrain) # 回歸擬合print('斜率a為:%.4f' % model.coef_[0]) print('截距b為:%.4f' % model.intercept_) print('線性回歸函數(shù)為:\ny = %.4fx + %.4f' % (model.coef_[0],model.intercept_)) # 參數(shù)輸出2.2?多元線性回歸
model = LinearRegression() model.fit(df[['b1', 'b2', 'b3', 'b4']], df['y']) # 多元線性回歸 rng = np.random.RandomState(5) xtrain = 10 * rng.rand(150,4) ytrain = 20 + np.dot(xtrain ,[1.5,2,-4,3]) df = pd.DataFrame(xtrain, columns = ['b1','b2','b3','b4']) df['y'] = ytrain pd.scatter_matrix(df[['b1','b2','b3','b4']],figsize=(10,6),diagonal='kde',alpha = 0.5,range_padding=0.1) print(df.head()) # 創(chuàng)建數(shù)據(jù),其中包括4個(gè)自變量 # 4個(gè)變量相互獨(dú)立 model = LinearRegression() model.fit(df[['b1', 'b2', 'b3', 'b4']], df['y']) print('斜率a為:', model.coef_) print('線性回歸函數(shù)為:\ny = %.1fx1 + %.1fx2 + %.1fx3 + %.1fx4 + %.1f' % (model.coef_[0],model.coef_[1],model.coef_[2],model.coef_[3],model.intercept_)) # 參數(shù)輸出?
?3. 線性回歸模型評(píng)估
?
?
線性回歸模型評(píng)估
通過(guò)幾個(gè)參數(shù)驗(yàn)證回歸模型
SSE(和方差、誤差平方和):The sum of squares due to error
MSE(均方差、方差):Mean squared error
RMSE(均方根、標(biāo)準(zhǔn)差):Root mean squared error
R-square(確定系數(shù)) Coefficient of determination
總結(jié):
能比較的有兩個(gè) R_square '確定系數(shù)' 、 MSE,
做兩個(gè)回歸模型可以分別判斷哪個(gè)MSE更小就好,R哪個(gè)接近于1哪個(gè)就更好。如果只有一個(gè)回歸模型,判斷是否接近1,只要是大于0.6、0.8就非常不錯(cuò)了。同時(shí)在后邊做組成成分,假如現(xiàn)在有10個(gè)參數(shù),做一個(gè)回歸模型,做一個(gè)R模型評(píng)估,比如說(shuō)為0.85,把這10個(gè)參數(shù)降維,降維為3個(gè)主成分,再做一個(gè)3元的線性回歸,這個(gè)叫回歸模型2,為0.92,這個(gè)時(shí)候我們就選擇那個(gè)3元的線性回歸模型0.92更好,相互比較做出最優(yōu)比較。
?
轉(zhuǎn)載于:https://www.cnblogs.com/shengyang17/p/9654972.html
總結(jié)
以上是生活随笔為你收集整理的数学建模:1.概述 监督学习--回归分析模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Mac模拟慢速网络 - Network
- 下一篇: Oracle数据库使用Analyze提升