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(path, names=
["size"
,"bedrooms"
,"price"])
data2 =
(data2 - data2.mean())
/ data2.std(
)# data2.head()
data2.insert(0,
"ones",1
)# 在訓練集中插入一列1,方便計算
# set x(training set), y(target variable)
# 設定訓練集x,和目標變數y的值
cols = data2.shape[1]
# 獲取列數
x = data2.iloc[:,
0:cols -1]
# 輸入向量x為前cols-1列
y = data2.iloc[
:, cols -
1:cols]
# 目標變數y為最後一列
x = np.array(x.values)
y = np.array(y.values)
theta = np.array([[
0,0,
0]])
gd_function.gra_des(x, y, theta,
0.01
,1000
)final_theta, cost = gd_function.gra_des(x, y, theta,
0.01
,1000
)final_cost = cost_function.compute_cost(x, y, final_theta)
print
(final_theta)
print
(final_cost)
# 由於梯度下降過程中每一次迭代都會得到乙個cost值,下面我們根據cost的值來繪製影象。
# 我們通常使用繪製cost影象的方式來觀測梯度下降演算法是否正常的執行,
# 若是演算法執行正常,該影象會一直下降
fig, ax = plt.subplots(figsize=(8
,6))
ax.plot(np.arange(0,
1000,)
, cost,
"r")
ax.set_xlabel(
"iterations"
)ax.set_ylabel(
"cost"
)ax.set_title(
"error vs traning iterations"
)plt.show(
)
由於代價函式和梯度下降函式不在主程式中,下面是兩個單獨函式的**:
import numpy as np
defcompute_cost
(x, y, theta)
: inner = np.power(x.dot(theta.t)
- y,2)
# 後面的2表示2次冪
return
sum(inner)/(
2*len(x)
)
import numpy as np
import cost_function
defgra_des
(x, y, theta, alpha, epoch)
: temp1 = np.zeros(theta.shape)
# 初始化乙個theta臨時矩陣
cost = np.zeros(epoch)
# 初始化乙個array,包含每次迭代後的cost
m = x.shape[0]
# 樣本數量m
for i in
range
(epoch)
:# 利用向量化同步計算theta值
# 注意theta是乙個行向量
temp1 = theta -
(alpha / m)
*(x.dot(theta.t)
- y)
.t.dot(x)
# 得出乙個theta行向量
theta = temp1
cost[i]
= cost_function.compute_cost(x, y, theta)
# 這個函式中,theta是變數,x,y是已知量
return theta, cost # 迭代結束之後返回theta和cost值
多變數線性回歸
固定隨機數 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...
C 實現線性回歸(多變數)
本文主要介紹c 實現線性回歸問題,實現房價的 可以有多個變數 1 單變數 2 多變數 1 測試資料 房價的估計 2 開發工具 vim gnu linux make gdb 3 執行環境 linux,g 4.9.2 4 動態庫 libmatrix.so 自己寫的矩陣包 libmyaxis.so 自己用...