解析法實現一元線性回歸、多元線性回歸以及數據模型可視化操作

目錄

  • 【1】解析法實現一元線性回歸
    • python列表實現
    • 利用Numpy實現
    • 利用TensorFlow實現
    • 數據和模型可視化
  • 【2】解析法實現多元線性回歸
    • 利用Numpy實現
      • 需要用到的NumPy數組運算函數
    • 數據和模型可視化
      • 繪制空間點集:
      • 繪制空間平面圖:
      • 繪制線框圖并且與散點圖對比:

【1】解析法實現一元線性回歸

公式:
在這里插入圖片描述
代碼:

python列表實現

#加載樣本數據
x=[137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]
y=[145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]
meanX=sum(x)/len(x)
meanY=sum(y)/len(y)
sumXY=0.0
sumX=0.0
for i in range(len(x)):sumXY+=(x[i]-meanX)*(y[i]-meanY)sumX+=(x[i]-meanX)*(x[i]-meanX)
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=[128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00]
print("面積\t估計房價")
for i in range(len(x_test)):print(x_test[i],"\t",round(w*x_test[i]+b,2))

結果:
在這里插入圖片描述

利用Numpy實現

import numpy as np
x=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
meanX=np.mean(x)
meanY=np.mean(y)
sumXY=np.sum((x-meanX)*(y-meanY))
sumX=np.sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = w*x_test+b
print("面積\t估計房價")
for i in range(y_pred.size):print(x_test[i],"\t",np.round(y_pred[i],2))

利用TensorFlow實現

import tensorflow as tf
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
meanX=tf.reduce_mean(x)
meanY=tf.reduce_mean(y)
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))
sumX=tf.reduce_sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=tf.constant([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = w*x_test+b
print(y_pred)

數據和模型可視化

#解析法實現一元線性回歸 
# #Realization of one variable linear regression by analytic method
#導入庫
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt 
#設置字體
plt.rcParams['font.sans-serif'] =['SimHei']
#加載樣本數據
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#學習模型-計算w,b
meanX=tf.reduce_mean(x)
meanY=tf.reduce_mean(y)
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))
sumX=tf.reduce_sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("權值w=",w.numpy())
print("偏置b=",b.numpy())
print("線性模型:y=",w.numpy(),"*x+",b.numpy())
#預測房價
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = (w*x_test+b).numpy()#將張量類型轉化為numpy數組類型
print("面積\t估計房價")
n=len(x_test)
for i in range(n):print(x_test[i],"\t",round(y_pred[i],2))
#模型和數據可視化
plt.figure()
#繪制散點圖
#張量和數組都可以作為散點函數的輸入提供點坐標
plt.scatter(x,y,color="red",label="銷售記錄")
plt.scatter(x_test,y_pred,color="blue",label="預測房價")
plt.plot(x_test,y_pred,color="green",label="擬合直線",linewidth=2)
#設置坐標軸的標簽文字和字號
plt.xlabel("面積(平方米)",fontsize=14)
plt.xlabel("價格(萬元)",fontsize=14)
#設置坐標軸的范圍
plt.xlim((40,150))
plt.ylim((40,150))
#設置標題文字和字號
plt.suptitle("商品房銷售價格評估系統v1.0",fontsize=20)
#在左上方顯示圖例
plt.legend(loc="upper left")
#顯示整個繪圖
plt.show()

結果:

【2】解析法實現多元線性回歸

利用Numpy實現

需要用到的NumPy數組運算函數

功能函數
數組堆疊np.stack( )
改變數組形狀np.reshape( )
矩陣相乘np.matmul( )
矩陣轉置np.transpose( )
矩陣求逆np.linalg.inv( )

公式:
在這里插入圖片描述

代碼:

#解析法實現多元線性回歸
#Realization of multiple linear regression by analytic method
#導入庫
import numpy as np
#=======================【1】加載樣本數據===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】數據處理===============================================
x0=np.ones(len(x1))
#堆疊屬性數組,構造屬性矩陣
#從(16,)到(16,3),因為新出現的軸是第二個軸所以axis為1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形狀為一列的數組
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型參數===============================================
Xt=np.transpose(X)                      #計算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #計算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #計算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元線性回歸方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#=======================【4】預測房價===============================================
print("請輸入房屋面積和房間數,預測房屋銷售價格")
x1_test=float(input("商品房面積:"))
x2_test=int(input("房間數:"))
y_pred=W[1]*x1_test+W[2]*x2_test+W[0]
print("預測價格:",round(y_pred,2),"萬元")

效果:

數據和模型可視化

繪制空間點集:

#解析法實現多元線性回歸
#Realization of multiple linear regression by analytic method
#導入庫與模塊
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加載樣本數據===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】數據處理===============================================
x0=np.ones(len(x1))
#堆疊屬性數組,構造屬性矩陣
#從(16,)到(16,3),因為新出現的軸是第二個軸所以axis為1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形狀為一列的數組
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型參數===============================================
Xt=np.transpose(X)                      #計算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #計算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #計算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元線性回歸方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#模型和數據可視化
fig=plt.figure(figsize=(8,6))
#創建3D繪圖對象
ax3d=Axes3D(fig)
#用來改變視角的函數
#elev:視角的水平高度  水平旋轉的角度 
#ax3d.view_init(elev=0,azim=-90)
#繪制散點圖
#張量和數組都可以作為散點函數的輸入提供點坐標
ax3d.scatter(x1,x2,y,color="b",marker="*")
ax3d.set_xlabel('Area',color='r',fontsize=16)
ax3d.set_ylabel('Room',color='r',fontsize=16)
ax3d.set_zlabel('Price',color='r',fontsize=16)
#設置y軸坐標值刻度
ax3d.set_yticks([1,2,3])
ax3d.set_zlim3d(30,160)
plt.show()
ax3d.view_init(elev=0,azim=-90)
ax3d.view_init(elev=0,azim=0)

繪制空間平面圖:

#解析法實現多元線性回歸
#Realization of multiple linear regression by analytic method
#導入庫與模塊
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加載樣本數據===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】數據處理===============================================
x0=np.ones(len(x1))
#堆疊屬性數組,構造屬性矩陣
#從(16,)到(16,3),因為新出現的軸是第二個軸所以axis為1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形狀為一列的數組
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型參數===============================================
Xt=np.transpose(X)                      #計算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #計算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #計算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元線性回歸方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#模型和數據可視化
X1,X2=np.meshgrid(x1,x2)
#平面方程
Y_PRED=W[0]+W[1]*X1+W[2]*X2
#創建3D繪圖對象
fig=plt.figure()
ax3d=Axes3D(fig)
#繪制空間平面圖
ax3d.plot_surface(X1,X2,Y_PRED,cmap="coolwarm")
ax3d.set_xlabel('Area',color='r',fontsize=14)
ax3d.set_ylabel('Room',color='r',fontsize=14)
ax3d.set_zlabel('Price',color='r',fontsize=14)
ax3d.set_yticks([1,2,3])
plt.show()

在這里插入圖片描述

繪制線框圖并且與散點圖對比:

#解析法實現多元線性回歸
#Realization of multiple linear regression by analytic method
#導入庫與模塊
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加載樣本數據===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】數據處理===============================================
x0=np.ones(len(x1))
#堆疊屬性數組,構造屬性矩陣
#從(16,)到(16,3),因為新出現的軸是第二個軸所以axis為1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形狀為一列的數組
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型參數===============================================
Xt=np.transpose(X)                      #計算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #計算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #計算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元線性回歸方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
y_pred=W[0]+W[1]*x1+W[2]*x2
#設置字體
plt.rcParams['font.sans-serif'] =['SimHei']
#模型和數據可視化
X1,X2=np.meshgrid(x1,x2)
#平面方程
Y_PRED=W[0]+W[1]*X1+W[2]*X2
#創建3D繪圖對象
fig=plt.figure()
ax3d=Axes3D(fig)
#繪制散點圖與線框圖
ax3d.scatter(x1,x2,y,color='b',marker="*",label="銷售記錄")
ax3d.scatter(x1,x2,y_pred,color='r',label="預測房價")
ax3d.plot_wireframe(X1,X2,Y_PRED,color='c',linewidth=0.5,label="擬合平面")ax3d.set_xlabel('Area',color='r',fontsize=14)
ax3d.set_ylabel('Room',color='r',fontsize=14)
ax3d.set_zlabel('Price',color='r',fontsize=14)
ax3d.set_yticks([1,2,3])
plt.suptitle("商品房銷售回歸模型",fontsize=20)
plt.legend(loc="upper left")
plt.show()

在這里插入圖片描述

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

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

相關文章

帶有示例的Python File readlines()方法

文件readlines()方法 (File readlines() Method) readlines() method is an inbuilt method in Python, it is used to get all lines from the file, the method is called with this object (current file stream/IO object) and returns all available lines in the file, w…

32位系統win2008+mssql2008 6G內存折騰紀實

十年沒搞硬件了,現在計算機發展到大硬盤大內存的時代了。一直都少搞服務器配置、運營,以前弄服務器都是普通的PC來當服務器。公司原來的一個業務系統用的是mssql2000好幾年了,由于業務數據越積壓越多最大的一張表已經有7000多萬條記錄了&…

case使用 上下篇

上篇 Case具有兩種格式。簡單Case函數和Case搜索函數。 --簡單Case函數 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函數 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END這兩種方式,可以實現相同的功能。簡單Case函數的寫法相對比…

第三章 字符串

第三章 字符串% 字符串是不可變的,所有的元素賦值和切片賦值都是非法的 Python提供了多種字符串格式設置方法 yanyu "hello, %s I like %s age is %s" beyond ("beyond","band",23) yanyu % beyond#結果為:hello, bey…

【視覺項目】【day5】8.25號實驗記錄(修完BUG,28張測試圖,13個樣本,四張測試圖誤判,這比之前效果好很多了)

目錄修改完BUG后的程序以及效果優化思路,增強正確識別率(待驗證)修改完BUG后的程序以及效果 修改代碼后的測試結果:(利用連通域面積將明顯比本張測試圖的瓶子要小的模板提前去除,減少誤判) 這樣下來,28張測…

linux kernel and user space通信機制,Linux內核空間與用戶空間通信機制地研究.doc

實用文案標準文檔Linux內核空間與用戶空間通信機制的研究Linux kernel space and user space communication mechanism摘 要Linux 是一個源碼開放的操作系統,無論是普通用戶還是企業用戶都可以編寫自己的內核代碼,再加上對標準內核的裁剪從而制作出適合自…

前臺用js、jquery出現錯誤很多是由于IE緩存

例如:當你用jquery進行異步請求數據時,如果瀏覽器發現請求的地址不變,或者參數也不改變的情況下 IE默認是取原來的緩存中的數據,而不進行重新請求數 解決的方法是是在地址欄的后面加上一個隨機參數值,IE發現地址改變&a…

python 示例_帶有示例的Python date timetuple()方法

python 示例Python date.timetuple()方法 (Python date.timetuple() Method) date.timetuple() method is used to manipulate objects of date class of module datetime. date.timetuple()方法用于操作模塊datetime的日期類的對象。 It is an instance method which means …

WebC.BBS 項目參與新人必讀

開發環境: 采用Visual Studio 2010,MVC版本采用Asp.Net MVC3,數據庫采用Sql2005 2008,擴展技術包括jQuery。 SVN的相關信息: SVN-Url:svn://svn.cyqdata.com/project_bbs 賬戶申請:請將自己的密碼發給組長,…

第四章 字典

第四章 字典{鍵:值,名字:電話號碼} 映射:通過名稱來訪問其各個值的數據結構 列表:將一系列值組合成數據結構并通過編號來訪問各個值 字典是Python中唯一的內置映射類型,其中的值不按順序排列,而是存儲在鍵下 鍵可能是數、字符串…

利用梯度下降法求解一元線性回歸和多元線性回歸

文章目錄原理以及公式【1】一元線性回歸問題【2】多元線性回歸問題【3】學習率【4】流程分析(一元線性回歸)【5】流程分析(多元線性回歸)歸一化原理以及每種歸一化適用的場合一元線性回歸代碼以及可視化結果多元線性回歸代碼以及可…

linux x64 asm 參數傳遞,NASM匯編學習系列(1)——系統調用和參數傳遞

0. 說明本學習系列代碼幾乎完全摘自:asmtutor.com,如果英文可以的(也可以用谷歌瀏覽器翻譯看),可以直接看asmtutor.com上的教程系統環境搭建:(我用的是ubuntu18.04.4 server,安裝gcc、g)sudo apt install nasmsudo apt…

Javascript之創建對象(原型模式)

我們創建的每個函數都有一個prototype(原型)屬性,這個屬性是一個指針,指向一個對象,它的用途是包含可以有特定類型的所有實例共享的屬性和方法。 prototype就是通過構造函數而創建的那個對象的原型對象。使用原型的好處就是可以讓所有對象實例…

treeset java_Java TreeSet pollLast()方法與示例

treeset javaTreeSet類pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 條件、循環及其他語句

第五章 條件、循環及其他語句 再談print和import print現在實際上是一個函數 1,打印多個參數 用逗號分隔,打印多個表達式 sep自定義分隔符,默認空格 end自定義結束字符串,默認換行 print("beyond",yanyu,23)#結果為…

兩種方法將Android NDK samples中hello-neon改成C++

一、第一種方法:1.修改helloneon.c 中代碼 a.將 char* str; 改為 char str[512] {0}; b.將 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改為 sprintf(str, "FIR Filter benchmark:\nC ve…

【視覺項目】【day6】8.26關于matchTemplate()以及NCC的思考整理

NCC與matchTemplate()函數中match_method TM_CCOEFF_NORMED是否一樣? 先看公式: TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:歸一化的相關性系數匹配方法 NCC:normalized cross correlation:歸一化互相關系數 公式是一樣的。 參考: 模板匹配的幾…

linux待機流程,Linux睡眠喚醒機制--Kernel態

一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…

strictmath_Java StrictMath log1p()方法與示例

strictmathStrictMath類log1p()方法 (StrictMath Class log1p() method) log1p() method is available in java.lang package. log1p()方法在java.lang包中可用。 log1p() method is used to return (the logarithm of the sum of the given argument and 1 like log(1d) in th…

第六章 抽象

第六章 抽象 自定義函數 要判斷某個對象是否可調用,可使用內置函數callable import math x 1 y math.sqrt callable(x)#結果為:False callable(y)#結果為:True使用def(表示定義函數)語句,來定義函數 …