您的位置:首页 > 编程语言 > MATLAB

[置顶] 【算法 机器学习】MATLAB、R、python三种编程语言实现简单线性回归算法比较

2017-06-13 09:41 1176 查看
data:2015-10-04

author:laidefa

今天看到机器学习中的回归,一个简单的线性回归原理想想无非就是利用最小二乘法进行拟合。想着自己去实现下算法,体验以下不同的编程语言实现算法有什么难易程度,亲自编完实现之后,心中方有感觉,得知结果python最佳。下面还是贴上代码把,仅供欣赏。

1、matlab实现最小二乘法算法

%data:2015-10-04
%author:laidefa
%function:简单线性回归算法MATLAB实现
function [b1,b0]=LinRe(x,y)
a=length(x);
sum1=0;sum2=0;
k1=mean(x);
k2=mean(y);
for i=1:a
sum1=sum1+(x(i)-k1)*(y(i)-k2);
sum2=sum2+(x(i)-k1).^2;
end
b1=sum1/sum2;
b0=k2-b1*k1;
end

function y=predict_LinRe(x,b1,b0);
y=b1*x+b0;
end


clc,clear
%数据
x=[1,3,2,1,3];
y=[14,24,18,17,27];
[b1,b0]=LinRe(x,y)
%当x=6时做预测
y1=predict_LinRe(6,b1,b0)


结果:
b1 =
5
b0 =
10
y1 =
40
>>


2、python实现最小二乘算法

import numpy as np

def LinRe(x,y):
a=len(x)
sum1=0;
sum2=0;
k1=np.mean(x)
k2=np.mean(y)
for i in range(0,a):
sum1+=(x[i]-k1)*(y[i]-k2)
sum2+=(x[i]-k1)**2

b1=sum1/sum2
b0=k2-b1*k1

return b1,b0

def predict(x,b1,b0):
return b1*x+b0

x=[1,3,2,1,3]
y=[14,24,18,17,27]
b1,b0=LinRe(x,y)
print "b1:",b1,"b0:",b0
x_test=6
y_test=predict(x_test,b1,b0)
print"y_test:",y_test


结果:
>>>
b1: 5.0 b0: 10.0
y_test: 40.0
>>>


3、R语言实现最小二乘算法

LinRe <- function(x,y){
a=length(x)
sum1=0
sum2=0
k1=mean(x)
k2=mean(y)
for (i in 1:a)
{
sum1=sum1+(x[i]-k1)*(y[i]-k2)
sum2=sum2+(x[i]-k1)^2
}
b1=sum1/sum2
b0=k2-b1*k1
return (c(b1,b0))
}

pre <- function(x,b1,b0){

return(b1*x+b0)
}

x <- c(1,3,2,1,3)
y <- c(14,24,18,17,27)
m <- LinRe(x,y)
b1 <- m[1]
b0 <- m[2]
x_test <- 6
y_test <- pre(x_test,b1,b0)
m;y_test


[1]  5 10
[1] 40
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: