1. 程式人生 > >斯坦福機器學習ex1.1(python)

斯坦福機器學習ex1.1(python)

blog com cnblogs div pan .com tlab 表示 def

使用的工具:NumPy和Matplotlib

NumPy是全書最基礎的Python編程庫。除了提供一些高級的數學運算機制以外,還具備非常高效的向量和矩陣運算功能。這些對於機器學習的計算任務是尤為重要的。因為不論是數據的特征表示也好,還是參數的批量設計也好,都離不開更加快捷的矩陣和向量計算。而NumPy更加突出的是它內部獨到的設計,使得處理這些矩陣和向量計算比起一般程序員自行編寫,甚至是Python自帶程序庫的運行效率都要高出許多。

Matplotlib是一款Python編程環境下免費試用的繪圖工具包,其工作方式和繪圖命令幾乎和matlab類似。

操作步驟:

1.數據初始化,將數據存放到x,y當中。

    print("Plotting Data...\n")
    fr=open(ex1data1.txt)
    arrayLines=fr.readlines()
    numberOfLines=len(arrayLines)
    x=np.zeros((numberOfLines,1))
    y=np.zeros((numberOfLines,1))
    index=0
    for line in arrayLines:
        line = line.strip()
        listFormLine = line.split(",")

        x[index, :] 
= listFormLine[:1] y[index] = listFormLine[-1] index += 1

2.求取代價函數(cost function)

技術分享

def computeCost(X,y,theta):
    m=X.shape[0]
    XMatrix=np.mat(X)
    yMatrix=np.mat(y)
    thetaMatrix=np.mat(theta)

    J=1/(2*float(m))*sum((np.array(XMatrix*thetaMatrix-yMatrix))**2)
    return J

3.采取梯度下降算法進行計算,首先將theta0與theta1都初始化為0,再使alpha為0.01,進行計算

技術分享

技術分享

def gradientDescent(X,y,theta,alpha,iterations):
    m=len(y)
    J_history=np.zeros((iterations,1))
    theta_s=theta.copy()
    for i in range(iterations):
        theta[0]=theta[0]-(alpha/m)*np.sum(np.mat(X)*np.mat(theta_s)-np.mat(y))
        p1=np.mat(X)*np.mat(theta_s)-np.mat(y)
        p2=X[:,1]*p1
        theta[1]=theta[1]-(alpha/m)*p2
        theta_s=theta.copy()
        J_history[i,:]=computeCost(X,y,theta)
    return theta

4.將數據可視化顯示

技術分享

詳細代碼:https://github.com/xingxiaoyun/StanfordMachineLearning/blob/master/ex1.py

斯坦福機器學習ex1.1(python)