每天进步一点点 -- pytorch学习:简单线性回归问题

前言

一直想学习人工智能,但是没有找到很好的课程,网上零碎的听了很多,大都是让我一脸蒙圈,不动手无法动脑,打算直接按照视频课程先搞起来,周志华的49讲是必须听的,对原理讲的很直观,不涉及实战和代码,pytorch的视频是随便找的,找了一个自己听着声音舒服点的而已,参考视频如下:
周志华机器学习49讲(入门初步),不涉及代码,B站很多,比如:南京大学周志华教授亲讲!大佬终于把机器学习讲的如此通俗易懂!学习视频教程分享给大家!_附教材电子版本
【深度学习Pytprch入门】5天从Pytorch入门到实战!Pytorch深度学习快速入门教程150全集!草履虫都学的会!

y=wx+b的线性回归问题

在现实世界中,x和y都是采样获取的,由于存在采样误差,其实方程应该是y=wx+b+ε,即添加一个随机误差,因此无法使用数学直接求解,还是使用机器学习梯度函数的方法求解的。
损失函数: 在这里插入图片描述

损失函数对w和b的偏导数:
在这里插入图片描述

在这里插入图片描述
需要做的是,写方程计算此在梯度下降法中的最小值:

# !/usr/bin/python
# coding: utf-8

import numpy as np


def compute_error_for_line_given_points(b, w, points):
    total_error = 0
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        total_error += (y - (w * x + b)) ** 2  # 对每个点(y-(wx+b))的平方进行加和,作为总损失函数
    return total_error / float(len(points))


def step_gradient(b_current, w_current, points, learningRate):
    b_gradient = 0
    w_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 - ((w_current * x) + b_current))  # 对每个点求偏导值的和,(y-(wx+b))
        w_gradient += -(2 / N) * x * (y - ((w_current * x) + b_current))  # (y-(wx+b))X
    new_b = b_current - b_gradient * learningRate
    new_w = w_current - w_gradient * learningRate
    return [new_w, new_b]


# starting_b b的起点
# starting_w w的起点
# learning_rate 学习率
# num_iterations 学习次数

def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):
    b = starting_b
    w = starting_w
    for i in range(num_iterations):
        b, m = step_gradient(b, w, np.array(points), learning_rate)
    return [b, m]


points = np.array([[1, 2], [4, 5], [6, 7]])
learning_rate = 0.01
num_iterations = 100
starting_b = 0
starting_w = 0
[b, w] = gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations)
print([b, w], compute_error_for_line_given_points(b, w, points))

LDA问题未分析

你可能感兴趣的:(机器学习,pytorch,学习,线性回归)