監督學習-回歸分析

一、數學建模概述

監督學習:通過已有的訓練樣本進行訓練得到一個最優模型,再利用這個模型將所有的輸入映射為相應的輸出。監督學習根據輸出數據又分為回歸問題(regression)和分類問題(classfication),回歸問題的輸出通常是連續的數值,分類問題的輸出通常是幾個特定的數值。

非監督學習:根據類別未知的訓練樣本,解決模式識別中的各種問題,主要為聚類問題(cluster analysis)。

?

二、回歸分析概述?

在統計學中,回歸分析(regression analysis)指的是確定兩種或兩種以上變量間互相依賴的定量關系的一種統計分析方法。

根據自變量和因變量之間的關系類型,可分為線性回歸分析和非線性回歸分析。

?

線性回歸linear analys

線性回歸通常是學習預測模型時首選的技術之一。在線性回歸中,因變量是連續的,而自變量可以是連續的的也可以是離散的,回歸線的性質是線性的。

線性回歸使用最佳的擬合直線(即回歸線)在因變量y和一個或多個自變量x之間建立一種關系,簡單線性回歸(一元線性回歸)可表示為y=a+b*x

多元線性回歸可表示為y=a+b1*x1+b2*x2。線性回歸可以根據給定的預測變量s來預測目標變量的值。

????

??

?

三、使用python實現線性回歸分析

需要先安裝sklearn模塊,并導入其中的線性回歸類from sklearn.linear_model import LinearRegression

model = LinearRegression()? 創建模型

model.fit(x,y)? 將樣本導入模型,x需要是列變量

print('斜率和截距分別為:',model.coef_,model.intercept_)

y_pre = model.predict(x_pre)? ?通過模型預測給定的自變量對應的因變量

?

1.一元線性回歸

rng = np.random.RandomState(1)  #生成隨機數種子,種子相同每次生成的隨機數相同
x = 10 * rng.rand(30)  #通過隨機數種子生成隨機數
y = 8 + 4 * x + rng.rand(30)  # rng.rand(30)表示誤差
#生成隨機數x和y,擬合樣本關系y = 8 + 4*x

fig = plt.figure(figsize=(10,4))
ax1 = fig.add_subplot(121)
plt.scatter(x,y,s = 10)
plt.title('樣本散點圖')model = LinearRegression()  # 創建線性回歸模型
model.fit(x[:,np.newaxis],y)   # 給模型導入樣本值,第一個參數為自變量,第二個參數為因變量,x[:,np.newaxis]表示給x在列上增加一個維度,不能直接使用x
print('斜率為%f,截距為%f'%(model.coef_,model.intercept_))
# 斜率為4.004484,截距為8.447659

xtest = np.linspace(0,10,1000)
ytest = model.predict(xtest[:,np.newaxis])   # 通過模型預測自變量對應的因變量
ax1 = fig.add_subplot(122)
plt.scatter(x,y,s = 10)
plt.plot(xtest,ytest,color = 'red')  #擬合線性回歸直線
plt.title('線性回歸擬合圖')

?

誤差,即樣本實際值與擬合得到的樣本值的差

rng = np.random.RandomState(2)
x = 10 * rng.rand(20)
y = 8 + 4 * x + rng.rand(20)*30   #誤差乘以20是為了在圖表中明顯顯示
model = LinearRegression()
model.fit(x[:,np.newaxis],y)
xtest = np.linspace(0,10,1000)
ytest = model.predict(xtest[:,np.newaxis])plt.plot(xtest,ytest,color = 'r',alpha = 0.7)   # 擬合線性回歸直線
plt.scatter(x,y,s = 10,color='green')  # 樣本散點圖
y2 = model.predict(x[:,np.newaxis])  # 樣本x在擬合直線上的y值
plt.scatter(x,y2,marker = '+',color = 'k')   # 樣本x擬合y的散點圖
plt.plot([x,x],[y,y2],color = 'gray')   #誤差線
plt.title('誤差線')

?

?2.多元線性回歸

矩陣點積參考https://blog.csdn.net/skywalker1996/article/details/82462499

rng = np.random.RandomState(3)
x = 10 * rng.rand(100,4)
y = 20 + np.dot(x,[1.5,2,-4,3]) + rng.rand(100)
df = pd.DataFrame(x,columns=['b1','b2','b3','b4'])
df['y'] = y
df.head()
pd.plotting.scatter_matrix(df[['b1','b2','b3','b4']],figsize = (10,10),diagonal='kde')  #根據矩陣散點圖判斷4個變量之間相互獨立,不需降維
model = LinearRegression()
model.fit(df[['b1','b2','b3','b4']],df['y'])
print('斜率為:',model.coef_,type(model.coef_))
print('截距為:',model.intercept_)
print('線性回歸函數為y = %.1fx1 + %.1fx2 + %.1fx3 + %.1fx4 + %.1f'%(model.coef_[0],model.coef_[1],model.coef_[2],model.coef_[3],model.intercept_))
# 斜率為: [ 1.50321961  2.0000257  -3.99067203  2.99358669] <class 'numpy.ndarray'>
# 截距為: 20.489657423197222
# 線性回歸函數為y = 1.5x1 + 2.0x2 + -4.0x3 + 3.0x4 + 20.5

四、線性回歸模型評估

通過幾個參數驗證回歸模型

  • SSE:和方差、誤差平方和,the sum of squares due to error
  • MSE:均方差、方差,mean squared error
  • RMSE:均方根、標準差,root mean squared error
  • R-square:確定系數,coefficient of determination

1.SSE(和方差)

該統計參數計算的是擬合數據和原始數據對應點的誤差的平方和,計算公式如下。

SSE越接近于0,說明模型選擇和擬合更好,數據預測也越成功。接下來的MSE和RMSE因為和SSE同出一宗,效果一樣。

2.MSE(均方差)

該統計參數是預測數據和原始數據對應點誤差的平方和的均值,也就是SSE/n,和SSE沒有太大的區別,計算公式如下。

3.RMSE(均方根)

該統計參數也叫回歸系統的擬合標準差,是MSE的平方根,就算公式如下

在這之前,誤差參數都是基于預測值和原始值之間的誤差(即點對點),而下面的誤差是相對原始數據平均值而展開的(即點對全)。

4.R-square(確定系數)

①SSR:Sum of squares of the regression,即預測數據與原始數據均值之差的平方和,公式如下。

②SST:Total sum of squares,即原始數據和均值之差的平方和,公式如下。

細心的網友會發現,SST=SSE+SSR,而“確定系數”是定義為SSR和SST的比值,故

其實“確定系數”是通過數據的變化來表征一個擬合的好壞。由上面的表達式可以知道“確定系數”的正常取值范圍為[0,1],越接近1表明方程的變量對y的解釋能力越強,這個模型對數據擬合的也較好。

from sklearn import metricsrng = np.random.RandomState(6)  
x = 10 * rng.rand(30)
y = 8 + 4 * x + rng.rand(30) * 3model = LinearRegression()
model.fit(x[:,np.newaxis],y)  # 回歸擬合

ytest = model.predict(x[:,np.newaxis])  # 求出預測數據

sse = ((ytest - y)**2).sum() # 求SSE,也可通過該方法得到SSE,再除以len(x)得到MSE
mse = metrics.mean_squared_error(ytest,y)  # 求均方差MSE,也可通過該方法算出MSE,再乘以len(x)得到SSE
rmse = np.sqrt(mse)  # 求均方根RMSE# ssr = ((ytest - y.mean())**2).sum()  # 求預測數據與原始數據均值之差的平方和
# sst = ((y - y.mean())**2).sum()  # 求原始數據和原始數據均值之差的平方和
# rr = ssr / sst # 求確定系數 
r = model.score(x[:,np.newaxis],y)  # 求出確定系數print('和方差SSE為:%.5f'%sse)
print('均方差MSE為: %.5f'% mse)
print('均方根RMSE為: %.5f'% rmse)
print('確定系數R-square為: %.5f'% r)
# 和方差SSE為:16.54050
# 均方差MSE為: 0.55135
# 均方根RMSE為: 0.74253
# 確定系數R-square為: 0.99512

?

5.線性回歸模型評估總結

主要是用MSE和 R_square。

如果是對一個樣本做兩個回歸模型,可以分別判斷哪個MSE更小哪個就更好、哪個R接近于1哪個就更好。如果只有一個回歸模型,判斷R是否接近1,大于0.6、0.8就非常不錯了。同時在后續做組成成分分析,假如有10個參數,做一個回歸模型后做一個R模型評估,比如說R為0.85,把這10個參數降維為3個主成分,再做一個3元的線性回歸,R為0.92,則3元線性回歸模型的R為0.92更好,相互比較做出最優比較。

?

轉載于:https://www.cnblogs.com/Forever77/p/11383677.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391611.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 54. 螺旋矩陣(遞歸)

給你一個 m 行 n 列的矩陣 matrix &#xff0c;請按照 順時針螺旋順序 &#xff0c;返回矩陣中的所有元素。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 輸入&#xff1a;matrix [[1,…

微服務架構技能

2019獨角獸企業重金招聘Python工程師標準>>> 微服務架構技能 博客分類&#xff1a; 架構 &#xff08;StuQ 微服務技能圖譜&#xff09; 2課程簡介 本課程分為基礎篇和高級篇兩部分&#xff0c;旨在通過完整的案例&#xff0c;呈現微服務的開發、測試、構建、部署、…

phpstorm 調試_PhpStorm中的多用戶調試

phpstorm 調試by Ray Naldo雷納爾多(Ray Naldo) PhpStorm中的多用戶調試 (Multi-User Debugging in PhpStorm) 使用Xdebug和DBGp代理 (Using Xdebug and DBGp Proxy) “Er, wait a minute… Don’t you just use xdebug.remote_connect_back which has been introduced since …

Tableau Desktop認證:為什么要關心以及如何通過

Woah, Tableau!哇&#xff0c;Tableau&#xff01; By now, almost everyone’s heard of the data visualization software that brought visual analytics to the public. Its intuitive drag and drop interface makes connecting to data, creating graphs, and sharing d…

約束布局constraint-layout導入失敗的解決方案 - 轉

今天有同事用到了約束布局&#xff0c;但是導入我的工程出現錯誤 **提示錯誤&#xff1a; Could not find com.Android.support.constraint:constraint-layout:1.0.0-alpha3** 我網上查了一下資料&#xff0c;都說是因為我的androidStudio版本是最新的穩定版導入這個包就會報這…

算法復習:冒泡排序

思想&#xff1a;對于一個列表,每個數都是一個"氣泡 "&#xff0c;數字越大表示"越重 "&#xff0c;最重的氣泡移動到列表最后一位&#xff0c;冒泡排序后的結果就是“氣泡”按照它們的重量依次移動到列表中它們相應的位置。 算法&#xff1a;搜索整個列表…

leetcode 59. 螺旋矩陣 II(遞歸)

給你一個正整數 n &#xff0c;生成一個包含 1 到 n2 所有元素&#xff0c;且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1&#xff1a; 輸入&#xff1a;n 3 輸出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 解題思路 按層進行數字的填充&#xff0c;每一層…

前端基礎進階(七):函數與函數式編程

縱觀JavaScript中所有必須需要掌握的重點知識中&#xff0c;函數是我們在初學的時候最容易忽視的一個知識點。在學習的過程中&#xff0c;可能會有很多人、很多文章告訴你面向對象很重要&#xff0c;原型很重要&#xff0c;可是卻很少有人告訴你&#xff0c;面向對象中所有的重…

期權數據 獲取_我如何免費獲得期權數據

期權數據 獲取by Harry Sauers哈里紹爾斯(Harry Sauers) 我如何免費獲得期權數據 (How I get options data for free) 網頁抓取金融簡介 (An introduction to web scraping for finance) Ever wished you could access historical options data, but got blocked by a paywall…

顯示與刪除使用工具

右擊工具菜單欄中的空白處選擇自定義 在彈出的自定義菜單中選擇命令選項在選擇想要往里面添加工具的菜單&#xff0c;之后在選擇要添加的工具 若想要刪除工具欄中的某個工具&#xff0c;在打開自定義菜單后&#xff0c;按住鼠標左鍵拖動要刪除工具到空白處 例如 轉載于:https:/…

js值的拷貝和值的引用_到達P值的底部:直觀的解釋

js值的拷貝和值的引用介紹 (Introduction) Welcome to this lesson on calculating p-values.歡迎參加有關計算p值的課程。 Before we jump into how to calculate a p-value, it’s important to think about what the p-value is really for.在我們開始計算p值之前&#xff…

leetcode 115. 不同的子序列(dp)

給定一個字符串 s 和一個字符串 t &#xff0c;計算在 s 的子序列中 t 出現的個數。 字符串的一個 子序列 是指&#xff0c;通過刪除一些&#xff08;也可以不刪除&#xff09;字符且不干擾剩余字符相對位置所組成的新字符串。&#xff08;例如&#xff0c;“ACE” 是 “ABCDE…

監督學習-KNN最鄰近分類算法

分類&#xff08;Classification&#xff09;指的是從數據中選出已經分好類的訓練集&#xff0c;在該訓練集上運用數據挖掘分類的技術建立分類模型&#xff0c;從而對沒有分類的數據進行分類的分析方法。 分類問題的應用場景&#xff1a;用于將事物打上一個標簽&#xff0c;通常…

istio 和 kong_如何啟動和運行Istio

istio 和 kongby Chris Cooney克里斯庫尼(Chris Cooney) 如何啟動和運行Istio (How to get Istio up and running) 而一旦完成&#xff0c;您就可以做的瘋狂的事情。 (And the crazy stuff you can do once it is.) The moment you get Istio working on your cluster, it fee…

js練習--貪吃蛇(轉)

最近一直在看javascript&#xff0c;但是發現不了動力。就開始想找動力&#xff0c;于是在網上找到了一個用js寫的貪吃蛇游戲。奈何還不會用git&#xff0c;就只能先這樣保存著。哈哈哈&#xff0c;這也算第一篇博客了&#xff0c;以后會堅持用自己的代碼寫博客的&#xff0c;下…

bzoj千題計劃169:bzoj2463: [中山市選2009]誰能贏呢?

http://www.lydsy.com/JudgeOnline/problem.php?id2463 n為偶數時&#xff0c;一定可以被若干個1*2 矩形覆蓋 先手每次從矩形的一端走向另一端&#xff0c;后手每次走向一個新的矩形 所以先手必勝 n為奇數時&#xff0c;先手走完一步后&#xff0c;剩下同n為偶數 所以先手必敗…

無監督學習-主成分分析和聚類分析

聚類分析&#xff08;cluster analysis&#xff09;是將一組研究對象分為相對同質的群組&#xff08;clusters&#xff09;的統計分析技術&#xff0c;即將觀測對象的群體按照相似性和相異性進行不同群組的劃分&#xff0c;劃分后每個群組內部各對象相似度很高&#xff0c;而不…

struts實現分頁_在TensorFlow中實現點Struts

struts實現分頁If you want to get started on 3D Object Detection and more specifically on Point Pillars, I have a series of posts written on it just for that purpose. Here’s the link. Also, going through the Point Pillars paper directly will be really help…

封裝jQuery下載文件組件

使用jQuery導出文檔文件 jQuery添加download組件 jQuery.download function(url, data, method){if( url && data ){data typeof data string ? data : paramEdit(data);     function paramEdit(obj){        var temStr "",tempStr"…

7.13. parallel - build and execute shell command lines from standard input in parallel

并行執行shell命令 $ sudo apt-get install parallel 例 7.5. parallel - build and execute shell command lines from standard input in parallel $ cat *.csv | parallel --pipe grep 13113 設置塊大小 $ cat *.csv | parallel --block 10M --pipe grep 131136688 原…