码迷,mamicode.com
首页 > 其他好文 > 详细

机器学习中简易方法----线性建模:最小二乘法

时间:2015-05-28 11:00:50      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:机器学习   线性建模   matlab   

 

在机器学习中,学习或者推断 属性 变量与相应 响应 变量或 目标 变量之间的 函数 关系,使得对于一个给定的属性(特征)集合,可以进行相应的预测。

例如,建立一个用户对物品的喜好预测模型。已知的数据中有用户信息(年龄,性别等),物品信息(种类,颜色等) ,以及用户对物品的喜好关系(例如 A用户喜好B物品)。在给定的用户和物品间(喜好关系未知),希望预测出用户对这个物品的喜好。

在此种情况下,建立一个 关于某个顾客以前买过物品的描述(属性) 和 该顾客最终是否喜好该产品(响应) 的模型。这个模型可以帮助我们预测顾客可能喜好的物品,并因此进行推荐。

 

一 线性建模

 

在属性与响应之间建立 线性 关系。


                                            技术分享

较为简单的线性关系,参数w0 和 w1是需要不断学习和训练的。

在这个直线中,w0为截距,w1为梯度。

 

1.1 例子,在MATLAB中以交互形式画出这个线性模型 (直线)

 

% %% PlotLine.m
% %% 定义x 输入
x = [-1 1 3];
 
%% 
figure(1);hold off
fprintf('\n 按 (ctrl-c) 退出\n');
while 1
    intercept = str2num(input('Enter intercept:','s'));
    gradient = str2num(input('Enter gradient:','s'));
plot(x,intercept + gradient.*x);
hold all
    fprintf('\n 直线: y = %g + %g x\n\n',intercept,gradient);
end


 1.2 模型的评价方式

            由w0 和 w1的一些值组成,这些值可以产生一条能尽可能与所有 (训练)数据点 接近 的直线。Tx下的真实值,tx下的预测值。

 

                                           技术分享

 

平方差定义:       

                       技术分享

平方差越小,说明预测值和真实值的误差越小

这个表达称为 平方损失函数 (squard loss function

                   技术分享

 考虑整个数据集上的 平均损失

 

                               技术分享

 w0w1的最小值,及求上式的最小值


1.3 最小二乘法

 

将上式展开并求偏导

                             

                                          技术分享               注:  技术分享  字母上的横线为平均值的含义

 

                        技术分享

 

1.4 向量与矩阵的引入

当多个属性集时,可能需要多个参数

例如,C1C2C3C4

当属性与参数较多时,使用向量和矩阵来描述。

                       技术分享

x为输入值(属性)的矩阵,为参数向量

                                             技术分享

 1.5 matlab例子,画出几个点的线性建模直线


<span style="color:#ff0000;">%% fitlinear.m
% From A First Course in Machine Learning, Chapter 1.
% Simon Rogers, 31/10/11 [simon.rogers@glasgow.ac.uk]</span>
clear all;close all;
 
%% Define the data (Table 1.1)
% Change these to use a different dataset
x = [1;3;5];
t = [4.8;11.1;17.2];
N = length(x); % 3
%% Compute the various averages required
% 
m_x = sum(x)/N;
%%
%
%
m_t = sum(t)/N;
%%
% 
m_xt = sum(t.*x)/N;
%%
% 
m_xx = sum(x.*x)/N;
 
 
%% Compute w1 (gradient) (Equation 1.10)
w_1 = (m_xt - m_x*m_t)/(m_xx - m_x^2);
%% Compute w0 (intercept) (Equation 1.8)
w_0 = m_t - w_1*m_x;
 
%% Plot the data and linear fit
figure(1);hold off
plot(x,t,'bo','markersize',10,'linewidth',2)
xplot = [0 6];
xlim(xplot)
hold on
plot(xplot,w_0+w_1*xplot,'r','linewidth',2)
xlabel('x');
ylabel('t');


以上代码的结果图:

           

                              技术分享


参考文献:

First course in machine learning

机器学习(中文版)

 

机器学习中简易方法----线性建模:最小二乘法

标签:机器学习   线性建模   matlab   

原文地址:http://blog.csdn.net/xinxing__8185/article/details/46117883

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!