通過scale feature利用梯度下降法求theta
直接代入推導出來的theta公式
通過驗算測試引數,可以得知兩個方法**結果相同
#part1:load data
print
"loading data...\n"
f=open('c:\python27\machinelearning\ex1data2.txt')
data=
for line in f:
m=len(data)
import numpy as np
#將資料由列表形式轉化為矩陣
data=np.asmatrix(data)
#提取每一行資料
x=data[:,0]
n=data[:,1]
y=data[:,2]
x=np.hstack((x,n))
#水平合併後x包含兩個變數:房間面積和數量
print
"first 10 examples from the dataset:\n"
print
"x=\n",x[0:10]
print
"y=\n",y[0:10]
#part 2: gradient descent
#將資料引數規則化
print
"normalizing features...\n"
#定義變數引數規則化函式——參考(
deffeaturenormalize
(x):
x_norm=x
m=len(x)
import numpy as np
#初始化均值和方差
mu=np.zeros([1,x.shape[1]])
sigma=np.zeros([1,x.shape[1]])
mu=np.matrix((np.mean(x[:,0]),np.mean(x[:,1])))#均值
#(x-mu)/sigma即將變數規則化
sigma=np.matrix((np.std(x[:,0]),np.std(x[:,1])))
for i in range(0,m):
x_norm[i,:]=(x[i,:]-mu)/sigma
return mu,sigma,x_norm
[mu,sigma,x]=featurenormalize(x)
#add intercept term to x
one=np.ones((m,1))
x=np.hstack((one,x))
alpha=0.3
#定義theta變化的係數(取值要合適)
num_iters=100
#定義迭代的次數
theta=np.zeros((3,1))#初始化theta三行一列陣列
#定義代價函式
defcomputecostmulti
(x,y,theta):
j=0import numpy as np
m=len(y)
j=np.sum(np.multiply((x*theta-y),(x*theta-y)))/(2*m)
return j
#定義梯度函式
defgradientdescentmulti
(x,y,theta,alpha,num_iters,m):
import numpy as np
n=x.shape[1]
j_history=
for i in range(0,num_iters):
h=x*theta#x為矩陣,*在此處是合適的,如果是陣列,則必須np.dot(x,theta)
t=np.zeros((n,1))#初始化偏導數的數值
#迭代累加求最合適的偏導數值
for i in range(0,m):
t=t+((h[i]-y[i])*x[i,:]).t
theta=theta-(alpha*t)/m
return theta,j_history
[theta, j_history] = gradientdescentmulti(x, y, theta, alpha, num_iters,m)
import matplotlib.pyplot as plt
x=for i in range(1,101):
plt.plot(x, j_history,'r')
plt.xlabel("number of iteration")
plt.ylabel("cost j")
print
"theta computed from gradient descent:\n "
print
"theta=\n",theta
print
"to estimate the price of a 1650 sq-ft,3 br house\n"
#x1引數標準規則化
x1=np.matrix([1650,3])
x1=(x1-mu)/sigma
x1=np.matrix([1,x1[0,0],x1[0,1]])
price=x1*theta
print
"price=",price
#part 3: normal equations
print
"soving with nornal equations\n"
#you need to redefine the x,y
x=data[:,0]
n=data[:,1]
y=data[:,2]
x=np.hstack((x,n))
one=np.ones((m,1))
x=np.hstack((one,x))
defnormequation
(x,y):
import numpy as np
theta=np.linalg.inv(x.t*x)*x.t*y#套用theta的推導公式
機器學習 多變數線性回歸
注 本系列部落格是博主學習stanford大學 andrew ng 教授的 機器學習 課程筆記。博主深感學過課程後,不進行總結非常easy遺忘,依據課程加上自己對不明確問題的補充遂有此系列部落格。本系列部落格包含線性回歸 邏輯回歸 神經網路 機器學習的應用和系統設計 支援向量機 聚類 將維 異常檢測...
機器學習 多變數線性回歸
1 說明 需要 房屋的 除了房屋面積還有其他的特徵量,比如層數,年齡,臥室數目等等,如下圖。因為有多個特徵值,所以稱為多變數線性回歸。2 假設函式 單變數只有乙個特徵值,所以之前的假設函式將不再適用,下面是多變數的假設函式。其中x0設定為1 3 特徵縮放 在所有特徵值中,size的範圍大概在0 20...
Python遷移學習 機器學習演算法
終有一天,人工智慧會像我們看待非洲平原上低階生物的化石一樣看待我們。在人工智慧眼中,人類只是直立行走的猿猴,用著粗糙的語言和簡陋的工具,從誕生起就注定會滅絕。電影 機械姬 機器學習是人工智慧中乙個流行的子領域,其涉及的領域非常廣泛。流行的原因之一是在其策略下有乙個由複雜的演算法 技術和方 組成的綜合...