01.python 实现线性回归-一元线性回归-最小二乘法

1.线性回归

 自变量(x)和因变量(y)之间的关系可以用一条直线近似表示,这种关系称为线性回归

2.最小二乘法

假设特征的数据只有一个

01.python 实现线性回归-一元线性回归-最小二乘法_第1张图片

在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离最小

01.python 实现线性回归-一元线性回归-最小二乘法_第2张图片

3. 求解线性回归 

求解W 和 B ,使得欧式距离最小的过程,称为线性回归模型的"最小二乘参数估计"

 将E(w,b)分别对w和b求导,可得到:

01.python 实现线性回归-一元线性回归-最小二乘法_第3张图片

令偏导数都为0 ,可以得到: 

01.python 实现线性回归-一元线性回归-最小二乘法_第4张图片

### 0 引入依赖
import numpy as np
import matplotlib.pyplot as plt

### 1 导入数据
points = np.genfromtxt('data.csv',delimiter=',')

## points 二维数组
##[[ 32.50234527,  31.70700585],
##[ 53.42680403,  68.77759598]]

## 提取points 中的两列数据,分别作为x,y 
x=points[:,0]##第一列 
y=points[:,1]##第二列

## 用plt画出散点图 
plt.scatter(x,y)
plt.show()

 01.python 实现线性回归-一元线性回归-最小二乘法_第5张图片

### 2. 定义损失函数
#损失函数是系数的函数,另外还要传入数据的x,y 
def compute_cost(w,b,points):
    total_cost = 0 
    M = len(points)
    
    # 逐点计算平方损失误差,然后求平均数
    for i in range(M):
        x = points[i,0]
        y = points[i,1]
        total_cost+= (y - w*x - b)**2  ## 这个对应最小二乘法函数
        
    return total_cost/M

### 3.定义算法拟合函数

# 先定义求均值的函数 
def average(data):
    sum = 0 
    num = len(points)
    for i in range(num):
        sum += data[i]
    return sum/num

# 定义核心拟合函数 
def fit(points):
    M = len(points)
    x_bar = average(points[:,0]) ##传入所有的第一列 并求均值
    
    sum_yx = 0 
    sum_x2 = 0 
    sum_delta=0
    
    for i in range(M):
        x = points[i,0]
        y = points[i,1]
        sum_yx += y * ( x - x_bar )  ## 对应求偏导W的分子部分
        sum_x2 += x ** 2             
    # 根据公式计算W
    w=sum_yx/(sum_x2- M *(x_bar**2)) ## 对应求偏导W公式
    
    for i in range(M):
        x = points[i,0]
        y = points[i,1]
        sum_delta+= (y - w*x )  ##对应求偏导b公式
    b = sum_delta / M
    
    return w,b

### 4. 测试
w,b=fit(points) ## 计算出 最小二乘法系数
print("w is :",w)
print("b is :",b)

cost=compute_cost(w,b,points)
print("cost is :",cost)


### 5.拟合曲线
plt.scatter(x,y) ##散点图
# 针对每一个x,计算出预测的y值
pred_y = w * x + b  #ny 可以用一个常数与向量直接相乘,对应原特征公式

plt.plot(x,pred_y,c='r') ##点图
plt.show()

 01.python 实现线性回归-一元线性回归-最小二乘法_第6张图片

你可能感兴趣的:(机器学习,python,线性回归,最小二乘法)