机器学习(四)- linear regression

本文深入探讨了线性回归的基本概念,包括如何利用训练集拟合参数θ,通过特征选取和模型假设建立预测方程。介绍了线性回归的迭代更新公式和梯度下降法,同时阐述了在矩阵形式下的表示。最后,提供了MATLAB代码示例,展示了不依赖代价函数迭代和基于代价函数优化两种情况的实现。

linear regression

线性回归很简单,就是运用我们已知的数据集(training set)去拟合出一组θ\thetaθ,等同于在空间中拟合出了一条曲线,然后我们就可以利用下面的方程进行数据预测了。当然这些都是在我们已经完成了特征选取和模型假设之后,特征选取就是xxx向量中的每个值(比如对于预测房价,我们觉得可能跟房子大小和卧室个数有关,所以我们的 xxx就有两个值,一个代表房子大小,一个代表卧室个数),模型假设就是hθ(x)h_\theta(x)hθ(x)
hθ(x)=θTx=θ0+θ1x1+...+θnxnh_\theta(x)=\theta^Tx=\theta_0+\theta_1x_1+...+\theta_nx_nhθ(x)=θTx=θ0+θ1x1+...+θnxn
具体步骤其实只有下面这个迭代方程:
θj:=θj−α1m∑i=1m(hθ(x(i))−y(i))xj(i)\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)
对于每一个θ\thetaθ,我们运用梯度下降。转换为矩阵形式就是:
θ:=θ−α1m(XT(Xθ−y))\theta := \theta-\alpha\frac{1}{m}(X^T(X\theta-y))θ:=θαm1(XT(Xθy))
需要提一句的是,这里的矩阵XXX还需要包含x0x_0x0,也就是一个全1向量,矩阵XXX应该有 n+1n+1n+1个column。
下面是matlab代码实现

for iter = 1:num_iters
    theta = theta - alpha*(1/m)*(X'*(X*theta-y));
end

如果我们不需要设置迭代结束的阈值,即代价函数。那么我们就只需要上面这个函数,设置一个迭代次数,我们就能求到我们的θ\thetaθ
如果我们需要运用代价函数,那么就需要用到下面这个方程:

J(θ)=12m∑i=1m(hθ(x(i))−y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})^2J(θ)=2m1i=1m(hθ(x(i))y(i))2
转化为矩阵形式就是:
J(θ)=12m(Xθ−y)T(Xθ−y)J(\theta) = \frac{1}{2m}(X\theta-y)^T(X\theta-y)J(θ)=2m1(Xθy)T(Xθy)
下面是matlab代码实现

    J = 1/(2*m)*((X*theta-y)'(X*theta-y));

### 线性回归与逻辑回归的区别 线性回归是一种用于预测连续变量的方法,其假设因变量 \( y \) 和自变量 \( X \) 之间存在线性关系。模型通过最小化实际观测值和预测值之间的平方差来拟合数据[^1]。 逻辑回归则主要用于分类问题,特别是二元分类。尽管名字中有“回归”,但实际上它是一个分类算法。逻辑回归利用 Sigmoid 函数将输入映射到 [0, 1] 的概率空间内,从而实现类别归属的概率估计[^2]。 #### 数学表达形式差异 对于线性回归而言,目标是最小化损失函数: \[ J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 \] 其中 \( h_\theta(x) = \theta_0+\theta_1x_1+...+\theta_nx_n \),即线性组合的形式。 而逻辑回归采用的是最大似然估计法求解参数,并且输出经过Sigmoid转换后的结果作为类别的概率分布: \[ P(y=1|x;\theta )=\frac {e^{\theta ^T x}}{1 + e^{\theta ^T x}},P(y=0|x;\theta )=\frac {1}{1 + e^{\theta ^T x}} \] ```python from sklearn.linear_model import LogisticRegression, LinearRegression import numpy as np # Example data generation for demonstration purposes only. X_linear = np.random.rand(100, 1)*10 Y_linear = 3*X_linear.squeeze() + 4 + np.random.randn(100) model_lr = LinearRegression() model_lr.fit(X_linear, Y_linear) print(f'Linear Regression Coefficients: {model_lr.coef_[0]}') X_logistic = np.vstack((np.ones_like(Y_linear), Y_linear)).T Y_logistic = (Y_linear > np.median(Y_linear)).astype(int) model_lg = LogisticRegression(solver='lbfgs') model_lg.fit(X_logistic[:, :-1], Y_logistic) print(f'Logistic Regression Coefficient: {model_lg.coef_[0][0]}') ``` ### 应用场景对比 当面对数值型的目标变量时,比如房价、温度等可以取任意实数的情况,应该优先考虑使用 **线性回归** 来建立预测模型;而对于离散的选择项或是事件发生的可能性评估,则更适合应用 **逻辑回归** 进行处理,例如判断邮件是否为垃圾邮件、客户是否会购买产品等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值