python實現表格線性回歸_Python實現線性回歸

一、線性回歸原理

二、python實現線性回歸

1.基本矩陣運算

pratice1.py:

# Author:WYC

import numpy as np

from numpy.linalg import inv

from numpy import dot

from numpy import mat

print('-------------給定矩陣A,B----------')

A = np.mat([1,1])

print ('A:\n',A)

B = mat([[1,2],[2,3]])

print ('B:\n',B)

print('--------------矩陣乘法-----------')

print('A.B:\n',dot(A,B))

print('--------------矩陣變形----------')

print('A.T:\n',A.T)

print('A.reshape(2,1):\n',A.reshape(2,1))

print('B.reshape(1,4):\n',B.reshape(1,4))

print('B的逆:\n',inv(B))

print('B[0,:]:\n',B[0,:])

print('B[:,0]:\n',B[:,0])

#print('A.B:',dot(B,A))

2.實現最小二乘法

pratice2.py:

# Author:WYC

import numpy as np

from numpy.linalg import inv

from numpy import dot

from numpy import mat

#y=2x

X = mat([1,2,3]).reshape(3,1)

Y = 2*X

#theta = (X'X)~-1X`Y

theta = dot(dot(inv(dot(X.T,X)),X.T),Y)

print(theta)

3.實現梯度下降法

pratice3.py:

# Author:WYC

import numpy as np

from numpy.linalg import inv

from numpy import dot

from numpy import mat

#y=2x

X = mat([1,2,3]).reshape(3,1)

Y = 2*X

#theta = theta - alpha*(theta*X -Y)*X

theta = 1.

alpha = 0.1

for i in range(100):

theta = theta + np.sum(alpha * (Y- dot(X, theta))*X.reshape(1,3))/3.

print(theta)

4.回歸分析實戰

注:從筆記上copy一個網友的數據生成,列數不夠,缺少y和x0部分,進行了修改,后面很多次試驗用梯度下降方法求解thera都是NAN的結果,經過調試,發現可能是小數保留位數太多所致,所以用round函數保留一位小數,做到和講解的數據一致:

data.py:

# Author:WYC

import random

def Y(X0, X1, X2, X3):

return 0.65 * X1 + 0.70 * X2 - 0.55 * X3 + 1.95

def Produce():

filename = 'data.csv'

with open(filename, 'w') as file:

file.write('X0,Y,X1,X2,X3,\n')

for i in range(200):

random.seed()

x0 = i

x1 = round(random.random() * 2,1)

x2 = round(random.random() * 2,1)

x3 = round(random.random() * 2,1)

y = round(Y(x0 , x1, x2, x3),1)

try:

file.write(str(x0) + ',' + str(y) +',' + str(x1) + ',' + str(x2) + ',' + str(x3) + '\n')

except e:

print ('Write Error')

print (str(e))

if __name__ == '__main__':

Produce()

#打印csv中的數據格式,后面幾行可以不要

import pandas as pd

dataset = pd.read_csv('data.csv')

print(dataset)

獲得x

獲得y

通過最小二乘法計算thera值

# Author:WYC

import numpy as np

from numpy.linalg import inv

from numpy import dot

from numpy import mat

import pandas as pd

dataset = pd.read_csv('data.csv')

# print(dataset)

temp = dataset.iloc[:, 2:5]

temp['X0'] = 1

X = temp.iloc[:, [3, 0, 1, 2]]

# print(X)

# Y = dataset.iloc[:,1]

# print(Y)

Y = dataset.iloc[:,1].values.reshape(200,1)#Y需要轉置

# # 通過最小二乘法(向量法)算theta

theta = dot(dot(inv(dot(X.T, X)),X.T), Y)

print(theta)

通過梯度下降法計算thera值

pratice4.py全部代碼如下:

# Author:WYC

import numpy as np

from numpy.linalg import inv

from numpy import dot

from numpy import mat

import pandas as pd

dataset = pd.read_csv('data.csv')

# print(dataset)

temp = dataset.iloc[:, 2:5]

temp['X0'] = 1

X = temp.iloc[:, [3, 0, 1, 2]]

# print(X)

# Y = dataset.iloc[:,1]

# print(Y)

Y = dataset.iloc[:,1].values.reshape(200,1)#Y需要轉置

# # 通過最小二乘法(向量法)算theta

theta = dot(dot(inv(dot(X.T, X)),X.T), Y)

print(theta)

# 通過梯度下降方法算theta

theta = np.array([1., 1., 1., 1.]).reshape(4, 1)

alpha = 0.1

temp = theta #使用緩存,使得梯度下降的時候更新

#200一般是lenth(Y)得到

# X0 = X.iloc[:, 0].reshape(200, 1)

# X1 = X.iloc[:, 1].reshape(200, 1)

# X2 = X.iloc[:, 2].reshape(200, 1)

# X3 = X.iloc[:, 3].reshape(200, 1)

# reshape 運行報錯的話,是因為在pandas里面已經過時

X0 = X.iloc[:, 0].values.reshape(200, 1)

X1 = X.iloc[:, 1].values.reshape(200, 1)

X2 = X.iloc[:, 2].values.reshape(200, 1)

X3 = X.iloc[:, 3].values.reshape(200, 1)

# 同步更新

for i in range(1000):

temp[0] = theta[0] + alpha*np.sum((Y- dot(X, theta))*X0)/200.

temp[1] = theta[1] + alpha*np.sum((Y- dot(X, theta))*X1)/200.

temp[2] = theta[2] + alpha*np.sum((Y- dot(X, theta))*X2)/200.

temp[3] = theta[3] + alpha*np.sum((Y- dot(X, theta))*X3)/200.

theta = temp

print(theta)

(完結)

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

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

相關文章

linux后臺啟動腳本nohup,linux下后臺執行shell腳本nohup

【GSM】GTM900C的應用——短信雖說GSM已經很老舊,但其低廉的價格,非常適合一些需要小數據上網傳輸和短信等功能的應用場合. 不知道GSM能否像51單片機一樣,在低端應用中長久不衰.GTM900C發送短信,支持兩種模式,TXT和PD ...iOS UITabBarController的使用UITabBarController 和 UI…

華為4g模塊 linux驅動程序,定制Android之4G-LTE模塊驅動

定制Android之4G-LTE模塊驅動一. 簡介本文講述在Android內核中,添加中國移動4G-LTE制式華為MU909模塊驅動,實現通過4G上網業務,電話業務,短信業務。CPU:Samsung 6410Kernel:linux 2.6.36…

軟件測試用例_軟件測試用例設計實戰場景法

不點藍字,我們哪來故事? 目錄場景法擴展例子場景法介紹影子場景法用例設計舉例場景法設計用例步驟和表示場景法舉例 總結 場景法的注意點場景法影子本來想直接跳過場景法的,今天群友提出問題:1、面試官問:場景…

linux下printf語句執行時間,linux下printf中\n刷新緩沖區的疑問(已解決)

#include #include int main(void){ printf("hello world");close(STDOUT_FILENO); return 0;}//什么都不輸出12345678910111234567891011#include #include int main(void){ printf("hello world\n");close(STDOUT_FILENO); …

樹莓派攝像頭_Arducam 8MP重磅來襲,為樹莓派4B構建完全同步的雙攝像頭方案~

大家好,我是小月月。雙目立體景深一直是很熱門的項目,最近已經有不少小伙伴學會在樹莓派上插兩個USB攝像頭了,這個方案可以識別靜態場景中各個物體的距離遠近。但是兩個USB攝像頭捕獲到的兩組圖像序列的時間并不是嚴格同步的,對運…

linux 獲取設備樹源文件(dts)里描述的資源,Linux 獲取設備樹源文件(DTS)里描述的資源...

在linux使用platform_driver_register() 注冊 platform_driver 時, 需要在 platform_driver 的probe() 里面知道設備的中斷號, 內存地址等資源。這些資源的描述信息存放在 resource 數據結構中, 相同的資源存放在一個樹形樹形數據結構中&…

python無法安裝第三方庫read time out_解決pip install的時候報錯timed out的問題

安裝包的時候報錯,執行:pip install pyinstaller問題:File "c:\python\python35\lib\site-packages\pip\_vendor\requests\packages\urllib3\response.py", line 357, in streamdata self.read(amtamt, decode_contentdecode_cont…

嵌入式linux文件系統類型,嵌入式Linux 的Cramfs 根文件系統配置的解決方案

當系統啟動并執行到系統初始化腳本/etc/init.d/rcS 時,mount 命令將/mnt/yaffs 目錄掛載 為ramfs 類型的隨機存儲文件系統,并在此文件系統上建立Qtopia 和Qtopia/tmp 目錄[5], /Qtopia/tmp 目錄即為應用程序可能對文件系統進行寫操作的臨時文…

python nlp data_Python nlpaug包_程序模塊 - PyPI - Python中文網

NLPAUG這個python庫幫助您為機器學習項目增加nlp。訪問此簡介了解Data Augmentation in NLP。Augmenter是增廣的基本元素,而Flow是將多個增廣器組合在一起的管道。起動指南增強器TargetAugmenterActionDescriptionCharacterRandomAuginsertInsert character randoml…

Linux創始人數據結構,Linux 通用數據結構說明

device_driver include/linux/device.h struct device_driver {const char * name; /* 驅動名稱 */struct bus_type * bus; /* 總線類型 */struct completion unloaded; /* 卸載事件通知機制 */ struct kobject kobj; /* sys 中…

python在瀏覽器運行一片空白_Webdriver啟動Firefox瀏覽器后,頁面顯示空白

在使用pycharm碼代碼時編譯總是出錯,后來驗證發現瀏覽器啟動后出現問題。白白耗了我2個小時。我把我的解決方案寫出來,希望對大家有幫助。1.現象:起初安裝的時候總是能正常運行,有一天突然發現Webdriver打開fFirefox瀏覽器后&…

centos linux7修改主機名,CentOS7操作系統下永久修改主機名

操作系統:CentOS Linux release 7.8任務:修改主機名為sky9899操作步驟如下:[root146 ~]# hostname*.*.*.*.adsl-pool.jx.chinaunicom.com[root146 ~]# hostnamectlStatic hostname: localhost.localdomainTransient hostname: *.*.*.*.adsl-…

稀疏自編碼器_自編碼(AutoEncoder)模型及幾種擴展之二

4. 稀疏自編碼假設我們只有一個沒有類別標簽的訓練樣本集合{x(1),x(2)...},一個自編碼神經網絡就是一種非監督學習算法,它使用BP算法,并將目標值設為: y(i)x(i)。我們的目標是希望得到hW,b(X)≈x。用aj(2)(x)表示輸入向量x對隱藏層單元j的激活…

linux x86 關機 過程,linux在x86上的中斷處理過程(詳細)

Linux在x86上的中斷處理過程一:引言在Intel的文檔中,把中斷分為兩種。一種是異常,也叫同步同斷。一種稱之為中斷,也叫異常中斷。同步中斷指的是由CPU控制單元產生,之所以稱之為同步,是因為只有一條指令執行完畢后才會發出中斷。例如除法運算中,除數為零的時候,就會產…

thymealf 高級用法_Thymeleaf

JSP 已經存在很長時間了,很多公司還在用,它看起來像 HTML,但其實并不是,它有一些缺陷。比如,每個頁面頂部都需要有如下聲明與 Servlet 規范緊密耦合的,依賴 Servlet 容器(意味著無法直接瀏覽效果)。工作過的…

linux 顯卡轉碼,ffmpeg用GPU轉碼

8種機械鍵盤軸體對比本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?有些視頻編碼太屌,播放起來對CPU消耗巨大,而在電視上或者電視盒子上看視頻,編碼就需要合適,樓主用的FireTV Stick&a…

ant實例 jmeter_Jmeter+ant搭建環境

1.將jmeter3.3和ant1.9.6放在一個文件夾下2.配置環境a、安裝jdk,配置環境變量變量名: JAVA_HOME變量值: C:\Program Files\Java\jdk1.8.0_91 (即jdk安裝的位置)變量名: Path (這個變量名已在系統變量中存在,現只需在這…

c語言課程設計作業五子棋,C語言課程設計報告五子棋游戲課程設計

C語言課程設計報告五子棋游戲課程設計 C語言課程設計報告_五子棋游戲-課程設計C語言課程設計報告_五子棋游戲|c語言程序代碼編程小程序設計|c語言課程設計報告課程案例**********************************************************//* 本程序在Turbo C或Borland C下編譯通過 */…

sqlmap圖形化_Web安全:SQL注入工具

原標題:Web安全:SQL注入工具SQL注入工具主要是針對Web服務器后臺數據庫的注入,其主要目的是獲取數據庫中的數據。以前常用的SQL注入工具有啊D注入工具及Domain(明小子注入工具),現在常用的SQL注入工具有HackBar、SQLMap、Pangolin…

在c語言程序中 對文件進行操作首先要,《C語言程序設計》試題八及答案

版權聲明:以上文章中所選用的圖片及文字來源于網絡以及用戶投稿,由于未聯系到知識產權人或未發現有關知識產權的登記,如有知識產權人并不愿意我們使用,如果有侵權請立即聯系:55525090qq.com,我們立即下架或…