我正在努力用python實現吳恩達的機器學習程式設計作業。由於時間關係,我大概會只實現最重要的部分,不會實現全部內容。如果有錯誤,希望可以及時糾正我,謝謝大家。
首先,匯入要用到的庫:numpy,matplotlib。
import numpy as np
import matplotlib.pyplot as plt
接下來,匯入作業裡的資料檔案:ex1data1.txt。匯入檔案之後,做相應處理,分為向量x和y。
file
='/users/christine/desktop/吳恩達作業/ex1data1.txt'
;digits=np.loadtxt(
file
,delimiter=
',')
x=digits[:,
0];y=digits[:,
1];
獲取x向量的行數,也就是資料的組數。
m=x.shape[0]
;
接下來給x向量的前面新增一列全為1的列,這是因為我們最終求出來的用於擬合的直線有兩個引數,類似y=k*x+b的形式,所以可以看作y=k*x1+b*x2,其中x2=1。
temp=np.ones(
(m),dtype=
'float');
x=np.vstack(
(temp,x));
x=x.t;
定義以下引數:
theta:二維向量,其中的兩個分量表示直線的兩個引數(即k和b),不過在吳恩達的教程裡,是用theta表示的,那我也定義成theta好了。
alpha:學習率,在作業本中吳恩達已經給我們選好了,是0.01。
iterations:迭代次數,這個也給我們設定好了。
h:和x維度相同的向量,表示用當前引數求出的y的估計值。
注意一點的是,theta不要初始化為int型別陣列,否則將無法得到正確答案。
theta=np.array(
[0.0
,0.0])
;alpha=
0.01
;iterations=
1500
;h=np.zeros(m)
;
接下來是迭代的過程。在我這裡出現了乙個問題,就是我每次輸出損失函式的值的時候,都大約是在4.8左右,但是吳恩達的作業裡寫,最終會得到乙個32.07的值,我目前還不太清楚我的錯誤的地方。但是我的程式也可以擬合出看起來正確的影象,我也暫時不追究了,希望看到這裡的讀者能幫幫我tat
for i in
range(1
,iterations)
: h=x.dot(theta)
;for k in
range(0
,2):
sum=0;
for j in
range(0
,m):
sum+=
(h[j]
-y[j]
)*x[j,k]
; theta[k]
=theta[k]
-alpha*
sum/m;
j=0;
for j in
range(0
,m):
j=j+
(h[j]
-y[j])*
(h[j]
-y[j]);
j=j/(2
*m);
print
(j);
然後尋找兩個點,求出這兩個點在擬合出的直線上的函式值。
x0=
5;y0=theta[0]
+x0*theta[1]
;x1=
24;y1=theta[0]
+x1*theta[1]
;
最後畫出函式影象,大功告成。由於時間原因,關於j的函式影象我就先不畫了。
plt.xlabel(
'population of city in 10000s');
plt.ylabel(
'profit in $10000s');
plt.plot(
(x0,x1)
,(y0,y1));
plt.plot(digits[:,
0],y,"ob"
);
吳恩達機器學習 程式設計練習7
本練習的主題是k means clustering and principal component analysis,即k均值聚類演算法和主要成分分析。因此這篇文章也分兩部分來討論,根據作業檔案的步驟來分別對k均值聚類演算法和pca進行討論原理以及如何實現。k means clustering al...
吳恩達機器學習 程式設計練習8
假設特徵服從正態分佈,通過計算整體概率判斷是否小於某個值,從而判斷是不是正常的。estimategaussian.m estimate parameters mu sum x m m add zeros n 1,n mu tmp mu m add mu tmp ones m,n mu tmp sig...
吳恩達機器學習筆記
為了解決實際生活中的問題,我們通常需要乙個數學模型。比如,小明有乙個房子 他想賣掉房子 為了知道房子的 小明收集了該地區近兩年的房屋交易 他發現房屋 與房屋大小呈正相關,所以他畫了了一幅圖 小明的房屋大小用紅色的 代替。可見和小明房屋一樣大小的房子並不存在,而類似的房屋 又有很大差別,如此小明決定用...