機器學習系統設計--1.4,學習系統設計--1.4
Building Machine Learning Systems with Python
-------------------
代碼:
https://github.com/Leechen2014/1400OS_01_Codes
author 振在遠方
---------------------
偶然間得到一本書:<<機器學習系統設計>> , 於是有了想看的衝動. 並且在github上上傳了相關代碼. 希望通過這本書可以開啟通往機器學習的大門.
---來自一個在機器學習道路上的學前班學生的獨白
整個代碼中比較重要的就是這個函數了:
因此就以這個function展開話題:
程式流程圖:
通過閱讀我們發現:
這個函數主要做了以下幾步:
1.1 接收未經處理資料X Y 以及建立的模型
在解析之前,有必要先說說 x , y 從哪裡來的? x,y的資料結構是什麼樣的? x y代表什嗎?
1 通過閱讀代碼可以知道 x,y 是在預先處理的時候擷取的,如所示
12-14行可知
data是二維的矩陣 ;由於tsv檔案的資料是以一個tab鍵(定位字元)作為分隔字元的,xy 就是從這個檔案中讀取過來的
可以這樣讀取:
data_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "data")
data = sp.genfromtxt(os.path.join(data_dir, "web_traffic.tsv"), delimiter='\t')
讀取之後,的內容是通過sp.genfromtxt()函數轉化為矩陣了. 因此可以通過對矩陣的操作讀取檔案中第一列和第二列:
26-27: x,y 是從data中擷取的兩列資料。 這樣一來就知道x y的資料結構是向量vector/array
x = data[:, 0]
y = data[:, 1]
24-26 : 是把未經處理資料中的not a number 元素剔除了
x = x[~sp.isnan(y)]
y = y[~sp.isnan(y)]
1.2 繪製出未經處理資料的點分布
Python 的plt.scatter(x[] , y[]) 用於在plt對象中繪製點,其座標為 (x[i],y[i]) , 這種寫法和C/matlab的風格很像
plt.scatter(x, y) # make a scatter plit of x y , where x and y are sequnce like obj of the same length
繪製圖表上的x, y軸的說明:
plt.xlabel("Time")
plt.ylabel("Hits/hours")
其實就是這裡:
接下來就是繪製x 和y 軸想的標誌點
plt.xticks([w * 7 * 24 for w in range(10)], ['week %i' % w for w in range(10)]) #get or set x-limites of current tick localti
plt.xticks(dis[] , name[]) 這函數接受兩個參數, 第一個參數指明座標 , 第二個參數指明對應的名稱; 其實就是這個:
plt.autoscale(tight=True) #設定圖片自動縮放
plt.ylim(ymin=0) #設定y軸的最小值
if ymax: #設定y軸的最大值
plt.ylim(ymax=ymax)
if xmin: # 設定x軸的最小值
plt.xlim(xmin=xmin)
plt.grid(True, linestyle='-', color='0.75') # 設定是都繪製網格,以及網格的顏色
plt.savefig(fname) # 儲存圖片
1.3 根據模型(如果有的話)繪製出擬合函數
這小結中需要瞭解: 模型怎麼建立的? 如何使用模型?
1.3.1 如何使用模型?
首先看看如何使用模型來繪製曲線:
通過閱讀 我們知道 這個模型應該線性模型 , 因為:
plt.plot(mx, model(mx), linestyle=style, linewidth=2, c=color)# 這句話是繪製一條曲線, 第一個參數是自變數,第二個參數是因變數,因變數是由模型model()根據自變數產生的 。 並且指定曲線的風格和曲線的寬度 顏色
最後繪製曲線的標誌 :
這句話產生的效果如下:
PS 此處的函數解析詳見:
http://matplotlib.org/api/pyplot_summary.html#
https://docs.scipy.org/doc/numpy/reference/generated/numpy.poly1d.html
https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html
https://docs.scipy.org/doc/scipy/reference/genindex.html
1.3.2 模型怎麼建立的?
這些模型是怎麼建立的呢? 又是如何?的? how implications? 我想這個應該是大家最關心的 , 因為特意放在最後:
先說說how implimention 其實思想很簡單:
我們在高中學過線性擬合的知識 , 這個就是利用線性擬合的方式來製造曲線......
不會? 沒關係, python已經提供了API :
polyfit是擬合的意思, 其中這個裡面的第一, 二個參數中是原始中點的x , y 軸座標. 第三個參數是自由度(x的最高次方). full是設定傳回值的性質,如果是false返回的是擬合函數的係數. 如果是ture 則會把與這個係數相關所有內容返回,比如 二次方程的係數, 誤差, ,,,,
具體詳見 https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html
你看看 , 這個程式說白了 是計算了一個咱們高中學的一個線性擬合相關的演算法( 大學的機率論中也有提到) , 所以數學很重要
---------------------
最後說說我的感悟:
說實話, 一個一個字coding確實很不容易, 認為比較簡單的部分就省略了. 對我這五個python初學者來說, 把python中的函數理清楚比較實在些, 所以在整理的時候會提更多的傾向於講解python中的函數
----------------------------
問幾個問題, 希望看到的同學可以留言:
1 這個程式算是機器學習麼?
2 機器學習的有監督學習中往往會說label (標記)和提取特徵值(extra feature)