2 多變數線性回歸 特徵縮放

2021-10-12 08:43:36 字數 2850 閱讀 6817

'''

多變數線性回歸:**房屋**,其中有2個特徵:房子的大小,臥室的數量。

'''import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

# 資料檔案路徑

path =

'data/ex1data2.txt'

# 讀取資料檔案:path(檔案路徑),header(列名),names(為資料命名)

# header=none時,即指明原始檔案資料沒有列索引,這樣read_csv會自動加上列索引,除非你給定列索引的名字。

data = pd.read_csv(path, header=

none

, names=

['size'

,'bedrooms'

,'price'])

# print(data.head())

# 特徵縮放(特徵歸一化):data.mean()得到每列資料的平均值,data.std()得到每列資料的標準偏差

# 標準偏差:一種度量資料分布的分散程度之標準,用以衡量資料值偏離算術平均值的程度

data =

(data - data.mean())

/ data.std(

)# 定義代價函式,返回代價值

defcomputecost

(x, y, theta)

: inner = np.power(

((x * theta.t)

- y),2

)# np.power(x,y):計算x的y次方(inner計算結果乙個列向量)

return np.

sum(inner)/(

2*len(x)

)# np.sum(矩陣):對矩陣內的所有元素求和

# 在訓練集中新增一列,以便我們可以使用向量化的解決方案來計算代價和梯度。

# loc(int型,表示第幾列;若在第一列插入資料,則 loc=0),column(給插入的列取名),value(列值)

data.insert(0,

'ones',1

)# 變數初始化

cols = data.shape[1]

# cols存放資料集的列數(3列)

x = data.iloc[:,

0:cols -1]

# x存放資料集的前cols-1(2列)的資料

y = data.iloc[

:, cols -

1:cols]

# y存放資料集的最後一列資料

# 將上述的x與y變數值轉換為 matrix 形式

x = np.matrix(x.values)

y = np.matrix(y.values)

theta = np.matrix([0

,0,0

])# 引數向量,初始值都為 0

print

('初始代價:'

, computecost(x, y, theta)

)# 計算初始代價函式的值

# 批量梯度下降,返回引數值和代價值

defgradientdescent

(x, y, theta, alpha, epoch)

:# epoch為迭代次數

temp = np.matrix(np.zeros(theta.shape)

)# temp用於更新引數θ向量

cost = np.zeros(epoch)

# cost[epoch]陣列存放每次迭代梯度下降後的代價值

m = x.shape[0]

# m存放樣本總數量

# 批量梯度下降

for i in

range

(epoch)

:# 利用向量化一步求解

temp = theta -

(alpha / m)

*(x * theta.t - y)

.t * x # 新引數θ向量

theta = temp # 賦值

cost[i]

= computecost(x, y, theta)

# 記錄每次的迭代後代價值

return theta, cost

# 初始化變數

alpha =

0.01

# 學習率

epoch =

1000

# 迭代次數

# 執行梯度下降演算法,優化引數θ向量

final_theta, cost = gradientdescent(x, y, theta, alpha, epoch)

# 列印最後的代價值

print

('最後的代價值:'

, computecost(x, y, final_theta)

)print

('final_theta:'

, final_theta)

# 畫代價函式圖

fig, ax = plt.subplots(figsize=(12

,8))

ax.plot(np.arange(epoch)

, cost,

'r')

ax.set_xlabel(

'iterations'

)ax.set_ylabel(

'cost'

)ax.set_title(

'error vs. training epoch'

)plt.show(

)

執行結果:

多變數線性回歸

import numpy as np import pandas as pd import matplotlib.pyplot as plt import cost function import gd function path ex1data2.txt data2 pd.read csv pat...

多變數線性回歸

固定隨機數 x1 numpy.random.random 50 x2 numpy.random.random 50 y 3 0.7 x1 2.3 x2 x numpy.c x1,x2 x numpy.c numpy.ones len x x y numpy.c y m,n x.shape alpha...

多變數線性回歸

python 推理部分 1 損失函式 注意,那個第一列為1的值是插入的,不是原始資料,為了彌補theta 0 這個引數。2 特徵歸一化 3 損失函式 特徵歸一化處理 param data 特徵值 return 特徵歸一化處理後的特徵值 return data data.mean data.std d...