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

1.线性回归

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

2.最小二乘法

假设特征的数据只有一个

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

3. 求解线性回归 

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

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

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

### 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()

 

### 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()

 

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python一元线性回归的设计思想是通过拟合一条直线来描述自变量和因变量之间的线性关系。线性回归类的实现可以通过以下步骤进行: 1. 导入必要的库:首先,需要导入NumPy库用于数值计算和数据处理,以及matplotlib库用于可视化结果。 2. 准备数据:将自变量和因变量的数据准备好,可以使用NumPy数组或者Pandas数据框来存储数据。 3. 定义线性回归类:创建一个名为LinearRegression的类,其中包含以下方法: - fit()方法:用于拟合模型,计算回归系数和截距。 - predict()方法:用于预测新的自变量对应的因变量值。 - score()方法:用于评估模型的性能,常用的评估指标包括均方误差(MSE)和决定系数(R^2)。 4. 实现线性回归算法:在LinearRegression类中实现fit()方法和predict()方法,可以使用最小二乘法或梯度下降法来解回归系数。 5. 可视化结果:使用matplotlib库将原始数据和拟合直线进行可视化,以便观察拟合效果。 下面是一个简单的示例代码: ```python import numpy as np import matplotlib.pyplot as plt class LinearRegression: def fit(self, X, y): # 计算回归系数和截距 self.coef_ = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) self.intercept_ = np.mean(y) - np.mean(X) * self.coef_ def predict(self, X): # 预测新的因变量值 return X * self.coef_ + self.intercept_ def score(self, X, y): # 评估模型性能 y_pred = self.predict(X) mse = np.mean((y_pred - y) ** 2) r2 = 1 - mse / np.var(y) return mse, r2 # 准备数据 X = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 5, 4, 5]) # 创建线性回归对象并拟合模型 lr = LinearRegression() lr.fit(X, y) # 预测新的因变量值 X_new = np.array([6, 7, 8]) y_pred = lr.predict(X_new) # 可视化结果 plt.scatter(X, y, color='blue', label='Original data') plt.plot(X_new, y_pred, color='red', label='Fitted line') plt.xlabel('X') plt.ylabel('y') plt.legend() plt.show() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值