机器学习 Linear Regression——线性回归实验

本文介绍了一个基于线性回归的实验,详细展示了如何从数据读取到模型训练的全过程,包括使用损失函数进行可视化,帮助理解模型优化过程。

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

完整的数据和代码已经更新至GitHub,欢迎fork~GitHub链接

This first exercise will give you practice with linear regression

实验内容

一、下载提供的数据,读入数据,画出相应的坐标点

二、使用数据,拟合出一条直线来,使用机器学习所讲的线性回归的方法来拟合出一条直线

三、理解损失函数,通过数据来画出损失函数的图像,进行可视化

实验步骤

一、读入数据,然后使用plot函数,画出散点图

如下图所示:
在这里插入图片描述

二、 使用以下规则,更新 theta,先对x多增加一列,实现x的维数和theta的维数可以实现乘法,在使用如下的公式来更新 theta
h θ ( x ) = θ T x = ∑ i = 0 n θ i x i , θ j = θ j − α ∗ 1 m ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) h_{\theta}(x)=\theta^Tx=\sum_{i=0}^{n}\theta_ix_i, \\ \theta_j=\theta_j-\alpha*\frac{1}{m}\sum_{i=1}^{n}(h_\theta(x^{(i)})-y^{(i)})x_{j}^{(i)} hθ(x)=θTx=i=0nθixi,θj=θjαm1i=1n(hθ(x(i))y(i))xj(i)
一共更新1500轮,最后通过plot函数来画出函数图像
在这里插入图片描述
这就是我们拟合出来的函数图像,显示拟合效果还是不错的,而且loss函数也是一直在减小的

三、画出损失函数的图像,使用,以下数据:

J_vals=zeros(100,100);
theta0=linspace(-3,3,100);
theta1=linspace(-1,1,100);
#损失函数,定义为(y^-y)2 再求和,除以2*m,即为损失函数:
loss=@(theta,x,y) mean((h(x,theta)-y).^2)/2;

因为这是三维图像,使用surf函数进行画图,结果如下:
在这里插入图片描述
在这里插入图片描述

通过观察,我们会发现,损失函数,是从各个方向趋于一个最小值,而这个最小值,正是我们需要达到的目标。

附:完整源代码

x = load ( 'F:\\Machine Learning\\exp\\ex1Data\\ex1x.dat') ; %50维
y = load ( 'F:\\Machine Learning\\exp\\ex1Data\\ex1y.dat') ; %50维
figure % open a new f i g u r e window
plot (x , y , ' o ' ) ;
ylabel ( 'Height in meters ')
xlabel ( 'Age in years ' )
u=0;
m=length(y); 
x=[ones(m,1),x]; % 50*2维度
h=@(x,theta) x*theta;
alpha=0.07;
theta=zeros(2,1); % 2*1维度
loss=@(theta,x,y) mean((h(x,theta)-y).^2)/2;
iteration=@(theta,alpha,y,x) theta-alpha*(x'*(h(x,theta)-y))/m;

for j=1:1500
    theta=iteration(theta,alpha,y,x);
end
hold on
plot(x(:,2),x*theta,'-');
legend( ' Training data ' , ' Linear regression' );

J_vals=zeros(100,100);
theta0=linspace(-3,3,100);
theta1=linspace(-1,1,100);
for i=1:length(theta0)
for j=1:length(theta1)
    t=[theta0(i);theta1(j)];
    J_vals(i,j)=loss(t,x,y);
end
end
J_vals =J_vals';
figure ;
surf (theta0, theta1, J_vals);
xlabel ( 'ntheta0' ) ; ylabel ( 'ntheta1' );
      

### 线性回归与逻辑回归的区别 线性回归是一种用于预测连续变量的方法,其假设因变量 \( 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、付费专栏及课程。

余额充值