机器学习(8)-- 非线性回归

本文介绍了一种使用Python生成模拟数据并应用线性回归分析的方法,通过梯度下降算法来最小化损失函数,找到最佳拟合直线的权重参数。详细展示了数据生成过程、损失函数计算以及梯度下降更新权重的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import random


def genData(pointCont, bias, variance):
    """
    x是多个二维的点,沿着y=x+b直线附近分布,b为bias,
    variance为y的基础偏差,总偏差为基础偏差+随机偏差
    :param pointCont: 生成的点的数量
    :param bias: 结果的偏差
    :param variance:
    :return: x:平面上的一系列点,y是对应点的标志
    """
    x = np.zeros(shape=(pointCont, 2))
    y = np.zeros(shape=(pointCont))
    for i in range(0, pointCont):
        x[i][0] = 1
        x[i][1] = i
        y[i] = (i + bias) + random.uniform(0, 1) + variance
    return x, y


def gradientDescent(x, y, theta, alpha, itemsCont, iters):
    """
    min cost :cost = sum(loss**2)/2m
                    = sum((h-y)**2)/2m
                    = sum (x*theta - y)**2/2m
            梯度:D(cost) = sum 2*(x*theta - y) * theta/2m
                        = sum 2*loss * theta/2m
                        = sum loss*theta/m
    :param x:
    :param y:
    :param theta: 初始权重参数
    :param alpha: 学习率
    :param itemsCont: 数据集大小
    :param iters: 迭代次数
    :return: 新的权重
    """
    xTran = np.transpose(x)
    for i in range(iters):
        hypothesis = np.dot(x, theta)   #预测值
        loss = hypothesis - y      #偏差
        cost = np.sum(loss**2)/(2*itemsCont)  #损失函数可以自行设置,这只是最简单的
        gradient = np.dot(xTran, loss)/itemsCont
        theta = theta - alpha*gradient
    return theta


x, y = genData(100,25,10)
print(x, y)
theta = np.ones(2)
theta = gradientDescent(x, y, theta, 0.0005, 100, 10000)
print(theta)
### 线性回归基础知识与入门教程 线性回归是一种用于建模特征(自变量)和响应变量(因变量)之间线性关系的方法[^4]。它广泛应用于数据分析和机器学习领域,能够帮助我们理解和预测连续型目标变量。 #### 1. 基本概念 简单线性回归涉及单个输入变量 \(x\) 和输出变量 \(y\) 的关系,通常表示为: \[ y = w_1x + b \] 其中 \(w_1\) 是权重(斜率),\(b\) 是偏置项(截距)。对于多个输入变量的情况,则扩展为多元线性回归形式: \[ y = w_1x_1 + w_2x_2 + \dots + w_nx_n + b \] 如果存在非线性关系,可以通过引入高次幂或其他变换来拟合更复杂的模式,例如二次项或三次项的关系[^1]。 #### 2. 使用 Python 实现线性回归 `scikit-learn` 提供了一个强大的工具 `LinearRegression()` 来快速构建线性回归模型。以下是基本用法示例: ```python from sklearn.linear_model import LinearRegression import numpy as np # 创建样本数据 X = np.array([[1], [2], [3], [4], [5]]) y = np.array([2, 4, 6, 8, 10]) # 初始化并训练模型 model = LinearRegression() model.fit(X, y) # 输出回归系数和截距 print(f"回归系数: {model.coef_[0]}") # 回归系数对应于 w1 print(f"截距: {model.intercept_}") # 截距对应于 b ``` 通过上述代码,我们可以轻松获取模型的参数,并进一步利用这些参数进行预测操作。 #### 3. 学习资源推荐 为了深入掌握线性回归的知识体系,建议参考 Andrew Ng 教授在斯坦福大学开设的《Machine Learning》课程[^2]。该课程不仅涵盖了理论基础,还包括实际案例的应用方法,非常适合初学者逐步提升自己的技能水平。 此外,《Python从零到壹》系列文章也提供了详尽的内容梳理,特别是关于回归分析的部分,包含了大量实例说明以及代码演示。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值