婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 如何用Python徒手寫線性回歸

如何用Python徒手寫線性回歸

熱門標簽:外呼電信系統 萬利達百貨商場地圖標注 上海企業外呼系統 智能機器人電銷神器 河南虛擬外呼系統公司 電話機器人哪里有賣 熱門電銷機器人 okcc外呼系統怎么調速度 惠州龍門400電話要怎么申請

對于大多數數據科學家而言,線性回歸方法是他們進行統計學建模和預測分析任務的起點。這種方法已經存在了 200 多年,并得到了廣泛研究,但仍然是一個積極的研究領域。由于良好的可解釋性,線性回歸在商業數據上的用途十分廣泛。當然,在生物數據、工業數據等領域也不乏關于回歸分析的應用。

另一方面,Python 已成為數據科學家首選的編程語言,能夠應用多種方法利用線性模型擬合大型數據集顯得尤為重要。

如果你剛剛邁入機器學習的大門,那么使用 Python 從零開始對整個線性回歸算法進行編碼是一次很有意義的嘗試,讓我們來看看怎么做吧。

數據

機器學習問題的第一步是獲取數據,沒有可以學習的數據就沒有機器學習。本文將使用非常常規的線性回歸數據集——房價預測數據集。

這是一個包含俄勒岡州波特蘭市房價的簡單數據集。該數據集中第一列是房屋面積(以平方英尺為單位),第二列是臥室的數量,第三列是房屋價格。該數據集中有多個特征(例如,house_size 和房間數),因此我們將研究多元線性回歸,標簽 (y) 是我們將要預測的房價。

首先定義用于加載數據集的函數:

def load_data(filename):
  df = pd.read_csv(filename, sep=",", index_col=False)
  df.columns = ["housesize", "rooms", "price"]
  data = np.array(df, dtype=float)
  plot_data(data[:,:2], data[:, -1])
  normalize(data)
    return data[:,:2], data[:, -1]

我們稍后將調用上述函數來加載數據集。此函數返回 x 和 y。

歸一化數據

上述代碼不僅加載數據,還對數據執行歸一化處理并繪制數據點。在查看數據圖之前,我們首先了解上述代碼中的 normalize(data)。

查看原始數據集后,你會發現第二列數據的值(房間數量)比第一列(即房屋面積)小得多。該模型不會將此數據評估為房間數量或房屋面積,對于模型來說,它們只是一些數字。機器學習模型中某些列(或特征)的數值比其他列高可能會造成不想要的偏差,還可能導致方差和數學均值的不平衡。出于這些原因,也為了簡化工作,我們建議先對特征進行縮放或歸一化,使其位于同一范圍內(例如 [-1,1] 或 [0,1]),這會讓訓練容易許多。因此我們將使用特征歸一化,其數學表達如下:

  • Z = (x — μ) / σ
  • μ : mean
  • σ : standard deviation

其中 z 是歸一化特征,x 是非歸一化特征。有了歸一化公式,我們就可以為歸一化創建一個函數:

def normalize(data):
  for i in range(0,data.shape[1]-1):
        data[:,i] = ((data[:,i] - np.mean(data[:,i]))/np.std(data[:, i]))

上述代碼遍歷每一列,并使用每一列中所有數據元素的均值和標準差對其執行歸一化。

繪制數據

在對線性回歸模型進行編碼之前,我們需要先問「為什么」。

為什么要使用線性回歸解決這個問題?這是一個非常有用的問題,在寫任何具體代碼之前,你都應該非常清楚要使用哪種算法,以及在給定數據集和待解決問題的情況下,這是否真的是最佳選擇。

我們可以通過繪制圖像來證明對當前數據集使用線性回歸有效的原因。為此,我們在上面的 load_data 中調用了 plot_data 函數,現在我們來定義一下 plot_data 函數:

def plot_data(x, y):
  plt.xlabel('house size')
  plt.ylabel('price')
  plt.plot(x[:,0], y, 'bo')
    plt.show()

調用該函數,將生成下圖:

房屋面積與房屋價格關系圖。

如上圖所示,我們可以粗略地擬合一條線。這意味著使用線性近似能夠做出較為準確的預測,因此可以采用線性回歸。

準備好數據之后就要進行下一步,給算法編寫代碼。

假設

首先我們需要定義假設函數,稍后我們將使用它來計算代價。對于線性回歸,假設是:

但數據集中只有 2 個特征,因此對于當前問題,假設是:

其中 x1 和 x2 是兩個特征(即房屋面積和房間數量)。然后編寫一個返回該假設的簡單 Python 函數:

def h(x,theta):
    return np.matmul(x, theta)

接下來我們來看代價函數。

代價函數

使用代價函數的目的是評估模型質量。

代價函數的等式為:

代價函數的代碼如下:

def cost_function(x, y, theta):
    return ((h(x, theta)-y).T@(h(x, theta)-y))/(2*y.shape[0])

到目前為止,我們定義的所有 Python 函數都與上述線性回歸的數學意義完全相同。接下來我們需要將代價最小化,這就要用到梯度下降。

梯度下降

梯度下降是一種優化算法,旨在調整參數以最小化代價函數。

梯度下降的主要更新步是:

因此,我們將代價函數的導數乘以學習率(α),然后用參數(θ)的當前值減去它,獲得新的更新參數(θ)。

def gradient_descent(x, y, theta, learning_rate=0.1, num_epochs=10):
  m = x.shape[0]
  J_all = []
  
  for _ in range(num_epochs):
    h_x = h(x, theta)
    cost_ = (1/m)*(x.T@(h_x - y))
    theta = theta - (learning_rate)*cost_
    J_all.append(cost_function(x, y, theta))

    return theta, J_all

gradient_descent 函數返回 theta 和 J_all。theta 顯然是參數向量,其中包含假設的θs 值,J_all 是一個列表,包含每個 epoch 后的代價函數。J_all 變量并非必不可少,但它有助于更好地分析模型。

整合到一起

接下來要做的就是以正確的順序調用函數

x,y = load_data("house_price_data.txt")
y = np.reshape(y, (46,1))
x = np.hstack((np.ones((x.shape[0],1)), x))
theta = np.zeros((x.shape[1], 1))
learning_rate = 0.1
num_epochs = 50
theta, J_all = gradient_descent(x, y, theta, learning_rate, num_epochs)
J = cost_function(x, y, theta)
print("Cost: ", J)
print("Parameters: ", theta)

#for testing and plotting cost 
n_epochs = []
jplot = []
count = 0
for i in J_all:
  jplot.append(i[0][0])
  n_epochs.append(count)
  count += 1
jplot = np.array(jplot)
n_epochs = np.array(n_epochs)
plot_cost(jplot, n_epochs)

test(theta, [1600, 2])

首先調用 load_data 函數載入 x 和 y 值。x 值包含訓練樣本,y 值包含標簽(在這里就是房屋的價格)。

你肯定注意到了,在整個代碼中,我們一直使用矩陣乘法的方式來表達所需。例如為了得到假設,我們必須將每個參數(θ)與每個特征向量(x)相乘。我們可以使用 for 循環,遍歷每個樣本,每次都執行一次乘法,但如果訓練的樣本過多,這可能不是最高效的方法。

在這里更有效的方式是使用矩陣乘法。本文所用的數據集具備兩個特征:房屋面積和房間數,即我們有(2+1)三個參數。將假設看作圖形意義上的一條線,用這種方式來思考額外參數θ0,最終額外的θ0 也要使這條線符合要求。

有利的假設函數圖示。

現在我們有了三個參數和兩個特征。這意味著θ或參數向量(1 維矩陣)的維數是 (3,1),但特征向量的維度是 (46,2)。你肯定會注意到將這樣兩個矩陣相乘在數學上是不可能的。再看一遍我們的假設:

如果你仔細觀察的話,實際上這很直觀:如果在特征向量 (x) {維度為 (46, 3)} 的開頭添加額外的一列,并且對 x 和 theta 執行矩陣乘法,將得出 hθ(x) 的方程。

記住,在實際運行代碼來實現此功能時,不會像 hθ(x) 那樣返回表達式,而是返回該表達式求得的數學值。在上面的代碼中,x = np.hstack((np.ones((x.shape[0],1)), x)) 這一行在 x 開頭加入了額外一列,以備矩陣乘法需要。

在這之后,我們用零初始化 theta 向量,當然你也可以用一些小隨機值來進行初始化。我們還指定了訓練學習率和 epoch 數。

定義完所有超參數之后,我們就可以調用梯度下降函數,以返回所有代價函數的歷史記錄以及參數 theta 的最終向量。在這里 theta 向量定義了最終的假設。你可能注意到,由梯度下降函數返回的 theta 向量的維度為 (3,1)。

還記得函數的假設嗎?

所以我們需要三個θ,theta 向量的維度為 (3,1),因此 theta [0]、theta [1] 和 theta [2] 實際上分別為θ0、θ1 和 θ2。J_all 變量是所有代價函數的歷史記錄。你可以打印出 J_all 數組,來查看代價函數在梯度下降的每個 epoch 中逐漸減小的過程。

代價和 epoch 數量的關系圖。

我們可以通過定義和調用 plot_cost 函數來繪制此圖,如下所示:

def plot_cost(J_all, num_epochs):
  plt.xlabel('Epochs')
  plt.ylabel('Cost')
  plt.plot(num_epochs, J_all, 'm', linewidth = "5")
    plt.show()

現在我們可以使用這些參數來找到標簽,例如給定房屋面積和房間數量時的房屋價格。

測試

現在你可以測試調用測試函數的代碼,該函數會將房屋面積、房間數量和 logistic 回歸模型返回的最終 theta 向量作為輸入,并輸出房屋價格。

def test(theta, x):
  x[0] = (x[0] - mu[0])/std[0]
  x[1] = (x[1] - mu[1])/std[1]

  y = theta[0] + theta[1]*x[0] + theta[2]*x[1]
    print("Price of house: ", y)

完整代碼

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#variables to store mean and standard deviation for each feature
mu = []
std = []

def load_data(filename):
  df = pd.read_csv(filename, sep=",", index_col=False)
  df.columns = ["housesize", "rooms", "price"]
  data = np.array(df, dtype=float)
  plot_data(data[:,:2], data[:, -1])
  normalize(data)
  return data[:,:2], data[:, -1]

def plot_data(x, y):
  plt.xlabel('house size')
  plt.ylabel('price')
  plt.plot(x[:,0], y, 'bo')
  plt.show()

def normalize(data):
  for i in range(0,data.shape[1]-1):
    data[:,i] = ((data[:,i] - np.mean(data[:,i]))/np.std(data[:, i]))
    mu.append(np.mean(data[:,i]))
    std.append(np.std(data[:, i]))


def h(x,theta):
  return np.matmul(x, theta)

def cost_function(x, y, theta):
  return ((h(x, theta)-y).T@(h(x, theta)-y))/(2*y.shape[0])

def gradient_descent(x, y, theta, learning_rate=0.1, num_epochs=10):
  m = x.shape[0]
  J_all = []
  
  for _ in range(num_epochs):
    h_x = h(x, theta)
    cost_ = (1/m)*(x.T@(h_x - y))
    theta = theta - (learning_rate)*cost_
    J_all.append(cost_function(x, y, theta))

  return theta, J_all 

def plot_cost(J_all, num_epochs):
  plt.xlabel('Epochs')
  plt.ylabel('Cost')
  plt.plot(num_epochs, J_all, 'm', linewidth = "5")
  plt.show()

def test(theta, x):
  x[0] = (x[0] - mu[0])/std[0]
  x[1] = (x[1] - mu[1])/std[1]

  y = theta[0] + theta[1]*x[0] + theta[2]*x[1]
  print("Price of house: ", y)

x,y = load_data("house_price_data.txt")
y = np.reshape(y, (46,1))
x = np.hstack((np.ones((x.shape[0],1)), x))
theta = np.zeros((x.shape[1], 1))
learning_rate = 0.1
num_epochs = 50
theta, J_all = gradient_descent(x, y, theta, learning_rate, num_epochs)
J = cost_function(x, y, theta)
print("Cost: ", J)
print("Parameters: ", theta)

#for testing and plotting cost 
n_epochs = []
jplot = []
count = 0
for i in J_all:
  jplot.append(i[0][0])
  n_epochs.append(count)
  count += 1
jplot = np.array(jplot)
n_epochs = np.array(n_epochs)
plot_cost(jplot, n_epochs)

test(theta, [1600, 3])

總結

這就是線性回歸的全部代碼了。

現在你已經學會了從零開始成功編寫線性回歸模型。能夠理解和編寫整個算法并不是一件容易的事,你或許需要時不時地回看才能完全理解。但這些努力是值得的,線性回歸通常是人們學習機器學習算法的第一步,在這之后你可以選擇另一個適用于線性回歸處理的數據集,并嘗試剛寫好的算法。

原文鏈接:

https://towardsdatascience.com/coding-linear-regression-from-scratch-c42ec079902

以上就是如何用Python徒手寫線性回歸的詳細內容,更多關于python 手寫線性回歸的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python 機器學習之支持向量機非線性回歸SVR模型
  • python實現機器學習之多元線性回歸
  • python實現機器學習之元線性回歸
  • python 實現一個簡單的線性回歸案例
  • python 還原梯度下降算法實現一維線性回歸
  • 如何在python中實現線性回歸
  • python 線性回歸分析模型檢驗標準--擬合優度詳解
  • 8種用Python實現線性回歸的方法對比詳解
  • python機器學習之線性回歸詳解

標簽:合肥 百色 淮安 綿陽 周口 綏化 周口 秦皇島

巨人網絡通訊聲明:本文標題《如何用Python徒手寫線性回歸》,本文關鍵詞  如,何用,Python,徒,手寫,線性,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何用Python徒手寫線性回歸》相關的同類信息!
  • 本頁收集關于如何用Python徒手寫線性回歸的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人午夜99999| 久久久九九九九| 久久精品亚洲精品国产欧美kt∨ | 国产精品久久久久影院| 亚洲午夜在线视频| 欧美私人免费视频| 精品中文av资源站在线观看| 91精品国产91久久综合桃花| 婷婷夜色潮精品综合在线| 国产无一区二区| 欧美性一级生活| 亚洲精品视频自拍| 亚洲综合色在线| 欧美日韩一区二区三区四区| 久久久国产午夜精品| 免费一级欧美片在线观看| 日韩精品一区二区三区三区免费| 成人自拍视频在线观看| 日韩一级片在线播放| 九九九久久久精品| 一区二区三区四区激情 | 日韩欧美亚洲国产另类| 国产成人精品1024| 日韩主播视频在线| 亚洲精品乱码久久久久久日本蜜臀| 日韩成人一级大片| 亚洲图片欧美色图| 欧美一区二区在线免费观看| 亚洲国产精品99久久久久久久久| 蜜臀av亚洲一区中文字幕| 日韩精品一区在线观看| 成人爽a毛片一区二区免费| 欧美一级在线免费| 久久久久久黄色| 久久久三级国产网站| 欧美日韩精品福利| 成人午夜免费电影| 波多野结衣在线一区| 激情欧美一区二区三区在线观看| 亚洲福利一区二区| 91影院在线免费观看| 日本欧美大码aⅴ在线播放| 国产精品久久久久一区二区三区共| 欧美丰满一区二区免费视频| 中文字幕一区二区三| 欧美三级三级三级爽爽爽| 波多野结衣中文字幕一区| www.66久久| 国产一区二区在线影院| 久久久综合激的五月天| 6080日韩午夜伦伦午夜伦| 日韩欧美国产电影| 日韩女优av电影在线观看| 欧美一区二区视频网站| 精品国产3级a| 久久精品日韩一区二区三区| www激情久久| 中文字幕中文字幕中文字幕亚洲无线| 91麻豆精品国产91久久久| 欧美综合欧美视频| 2欧美一区二区三区在线观看视频| 欧美一区二区三区免费大片| 国产成人免费在线| 在线观看亚洲专区| 9191精品国产综合久久久久久| 色8久久精品久久久久久蜜| 91麻豆国产福利在线观看| 在线中文字幕一区| 91免费观看在线| 亚洲在线视频一区| av在线一区二区三区| 欧美在线观看18| 精品久久久网站| 亚洲午夜av在线| 91麻豆123| 欧美日韩亚洲综合| 中文字幕一区二区三区视频| 日韩精品中文字幕一区| 亚洲综合偷拍欧美一区色| 日韩av一级片| 狠狠色综合色综合网络| 国产一区二区剧情av在线| 成人黄页在线观看| 久久精品亚洲乱码伦伦中文| 色综合天天视频在线观看| 亚洲激情网站免费观看| 欧美一区二区三区色| 一道本成人在线| 97久久人人超碰| 成人激情电影免费在线观看| 寂寞少妇一区二区三区| 精品免费99久久| 51久久夜色精品国产麻豆| 色噜噜偷拍精品综合在线| 欧美艳星brazzers| 成人黄色在线网站| 成人高清在线视频| 色综合激情五月| 欧美日韩国产片| 久久国产精品99久久久久久老狼| 91国产福利在线| 国产女人水真多18毛片18精品视频| 中文字幕一区二区三区在线观看 | www.亚洲在线| av毛片久久久久**hd| 亚洲精品乱码久久久久久久久 | 99久久精品一区| 一区二区三区在线观看网站| 久久亚洲精品小早川怜子| 久久精品国产久精国产| 久久亚洲一区二区三区明星换脸| 91麻豆精品国产自产在线观看一区| 国精产品一区一区三区mba视频 | 色婷婷激情综合| 高清av一区二区| 99久久国产综合精品色伊 | 美女精品一区二区| 国产成人免费9x9x人网站视频| 成人综合在线观看| 91精品免费观看| 中文字幕亚洲在| 日韩高清不卡一区二区| 成人av网站大全| 91精品欧美久久久久久动漫 | 正在播放亚洲一区| 亚洲男同1069视频| 成人av电影在线播放| 在线播放中文一区| 蜜臀久久99精品久久久画质超高清| 欧美国产精品劲爆| 日韩视频在线你懂得| 首页欧美精品中文字幕| 欧美tickling挠脚心丨vk| 日韩二区三区四区| 国产午夜精品一区二区| 亚洲精品中文在线观看| 国产精品中文字幕一区二区三区| 91在线观看一区二区| heyzo一本久久综合| 色综合久久久久综合体| 91视频国产资源| 国产精品久久久久久久久搜平片| 欧美一级片在线看| 中文字幕av一区二区三区| 国产精品国产三级国产aⅴ原创| 亚洲成人午夜电影| 国产亚洲综合av| 欧美国产欧美综合| 成人a区在线观看| 亚洲视频1区2区| 制服丝袜日韩国产| 日韩制服丝袜先锋影音| 国产aⅴ综合色| 国产在线一区二区综合免费视频| 欧美激情一区不卡| 在线精品亚洲一区二区不卡| 经典三级一区二区| 狠狠色狠狠色综合| 99久久久国产精品免费蜜臀| 丁香婷婷深情五月亚洲| 91官网在线免费观看| 91精品国产全国免费观看| 欧美理论在线播放| 欧美撒尿777hd撒尿| 国产偷国产偷精品高清尤物| 欧美精品久久一区| 国产日本亚洲高清| 国产成人免费视频网站 | 国产精品午夜电影| 成人精品免费网站| 日日骚欧美日韩| 亚洲大尺度视频在线观看| 欧美日韩精品久久久| av在线不卡网| 欧美在线|欧美| 在线观看不卡一区| 成人国产精品视频| 成人午夜电影小说| 国产成人精品www牛牛影视| 久久福利资源站| 国产夫妻精品视频| caoporm超碰国产精品| 777午夜精品免费视频| 精品人在线二区三区| 久久精品亚洲乱码伦伦中文| 久久中文娱乐网| 成人欧美一区二区三区白人| 一区二区三区在线观看欧美| 一区二区三区日韩欧美精品| 天天色天天爱天天射综合| 久久99热99| 99在线精品一区二区三区| 欧美日韩一区二区欧美激情| 精品国产露脸精彩对白| 97久久超碰国产精品| 欧美一区二区国产| 中文字幕va一区二区三区| 日本中文在线一区| 91在线国产福利| xfplay精品久久|