UFLDL学习笔记1——Linear Regression

本文介绍如何解决在使用UFLDL进行线性回归编程时遇到的MATLAB mex文件相关错误,并通过向量化技巧优化代码执行速度。文章详细解释了错误原因、解决方案及MATLAB向量化在编程实践中的应用。

UFLDL地址

想了解下深度学习,看到网上有人推荐Andrew NG团队做的UFLDL,他们给的上机练习挺多,而且是用matlab,感觉自己编程太菜,顺便可以跟着练练实际操作。第一节linear regression,内容没有什么难度,上机也不难,但还是遇到了点小麻烦。

% YOUR CODE HERE %
  for num=1:m
    f = f + 1/2*(theta'*X(:,num)-y(num))^2;
    g = g + (theta'*X(:,num)-y(num))*X(:,num);
  end

编写fg之后执行ex1a_linreg.m后出现如下错误:

??? Undefined function or method 'lbfgsAddC' for input arguments of type 'int32'.

这里给出了解决方法:
You get the error “??? Undefined function or method ‘lbfgsAddC’”. This occurs if Matlab can’t find the mex file for your operating system. If this occurs, you can either: (i) set ‘options.useMex’ to 0, or (ii) compile the mex file for your operating system by running the mexAll function. If you end up compiling a file in minFunc for your operating system, please send it to me and I will add to the distribution.
这是一位UBC的教授主页里面的东西,还有更详细的关于他写的minFunc的一些资料,现在不太想深究里面太具体的玩意。我就把ex1a_linreg.m

options = struct('MaxIter', 200);

替换为

options = struct('MaxIter', 200,'useMex',0);

就可以了。

练习中还让感受一下matlab的vectorization features加快执行速度。

Using MATLAB’s vectorization features to speed up code.

%%% YOUR CODE HERE %%%
f = 1/2*(theta'*X-y)*(theta'*X-y)';
g = X*(theta'*X-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]}') ``` ### 应用场景对比 当面对数值型的目标变量时,比如房价、温度等可以取任意实数的情况,应该优先考虑使用 **线性回归** 来建立预测模型;而对于离散的选择项或是事件发生的可能性评估,则更适合应用 **逻辑回归** 进行处理,例如判断邮件是否为垃圾邮件、客户是否会购买产品等问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值