美文网首页
DL00 Intro

DL00 Intro

作者: 大_伟 | 来源:发表于2017-06-03 01:17 被阅读0次

    DL Intro

    熟悉sckit learn
    import pandas as pd
    from sklearn import linear_model
    import matplotlib.pyplot as plt
    
    #read data
    dataframe = pd.read_fwf('brain_body.txt')
    x_values = dataframe[['Brain']]
    y_values = dataframe[['Body']]
    
    #train model on data
    body_reg = linear_model.LinearRegression()
    body_reg.fit(x_values, y_values)
    
    #visualize results
    plt.scatter(x_values, y_values)
    plt.plot(x_values, body_reg.predict(x_values))
    plt.show()
    
    gradient descent
    • 一种寻找 local minimum 的方法;
    • 对各维度求偏导数,顺着偏导数的方向(local minimum 方向)跑,跑的幅度(即learning rate);
    • 几个概念类比:
      • 偏导数的方向: 人脑学习技能时的学习“方向”;
      • learning rate: 人脑学习技能时候的细致程度;学得太细,完成学习的时间就长;学得太粗,可能最后没法子“收敛”(即完不成学习),把握好learning rate的度。。。
    #The optimal values of m and b can be actually calculated with way less effort than doing a linear regression. 
    #this is just to demonstrate gradient descent
    
    from numpy import *
    
    # y = mx + b
    # m is slope, b is y-intercept
    def compute_error_for_line_given_points(b, m, points):
        totalError = 0
        for i in range(0, len(points)):
            x = points[i, 0]
            y = points[i, 1]
            totalError += (y - (m * x + b)) ** 2
        return totalError / float(len(points))
    
    def step_gradient(b_current, m_current, points, learningRate):
        b_gradient = 0
        m_gradient = 0
        N = float(len(points))
        for i in range(0, len(points)):
            x = points[i, 0]
            y = points[i, 1]
            b_gradient += -(2/N) * (y - ((m_current * x) + b_current))
            m_gradient += -(2/N) * x * (y - ((m_current * x) + b_current))
        new_b = b_current - (learningRate * b_gradient)
        new_m = m_current - (learningRate * m_gradient)
        return [new_b, new_m]
    
    def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations):
        b = starting_b
        m = starting_m
        for i in range(num_iterations):
            b, m = step_gradient(b, m, array(points), learning_rate)
        return [b, m]
    
    def run():
        points = genfromtxt("data.csv", delimiter=",")
        learning_rate = 0.0001
        initial_b = 0 # initial y-intercept guess
        initial_m = 0 # initial slope guess
        num_iterations = 1000
        print "Starting gradient descent at b = {0}, m = {1}, error = {2}".format(initial_b, initial_m, compute_error_for_line_given_points(initial_b, initial_m, points))
        print "Running..."
        [b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)
        print "After {0} iterations b = {1}, m = {2}, error = {3}".format(num_iterations, b, m, compute_error_for_line_given_points(b, m, points))
    
    if __name__ == '__main__':
        run()
    

    相关文章

      网友评论

          本文标题:DL00 Intro

          本文链接:https://www.haomeiwen.com/subject/iocpfxtx.html