资讯专栏INFORMATION COLUMN

线性回归:python & R & Java

iOS122 / 2064人阅读

摘要:在模型原型开发阶段,可能和比较适合在模型上线阶段,可能和比较合适。线性回归是最基础的数据挖掘算法。本文对其不同语言的实现进行简单介绍。源码可采用库进行线性回归。一元线性回归多元线性回归关于作者丹追兵数据分析师一枚,编程语言和,使用。

前言

由于场景不同,数据挖掘适合的编程语言不同。在模型原型开发阶段,可能R和python比较适合;在模型上线阶段,可能Java和python比较合适。而不同的线上框架又支持不同的语言,比如JStorm只能用Java搞,而Spark则比较友好,同时支持Java和python两种语言。同样的情况也发生下原型开发阶段:如果是单机环境,R和python都很不错;但假如数据较大要放到诸如阿里云ODPS分布式平台,则没法用R,只能用python,而且python只能用numpy库,没法用sklearn。因此,算法工程师需要具备使用不同编程语言实现同一算法的能力。

线性回归是最基础的数据挖掘算法。本文对其不同语言的实现进行简单介绍。

python numpy
import numpy as np

x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])

A = np.vstack([x, np.ones(len(x))]).T
m, c = np.linalg.lstsq(A, y)[0]
print(m, c)

import matplotlib.pyplot as plt
plt.plot(x, y, "o", label="Original data", markersize=10)
plt.plot(x, m*x + c, "r", label="Fitted line")
plt.legend()
plt.show()
sklearn
from sklearn import linear_model
clf = linear_model.LinearRegression() # linear_model.LinearRegression(fit_intercept=False)
clf.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
clf.coef_

sklearn的linear_model的fit方法,底层是调用了numpy的linalg.lstsq方法,相当于将一个函数封装为对象的一个方法,将面向过程转化为面向对象的编程模式。源码

R
x <- c(0, 1, 2, 3)
y <- c(-1, 0.2, 0.9, 2.1)
df <- data.frame(x,y)

lr_model <- lm(y ~ x) # lm(y ~ x - 1) # without intercept
summary(lr_model)

library(ggplot2)
ggplot() + geom_point(aes(x=x, y=y), data=df) + geom_abline(slope=lr_model$coefficients[2], intercept=lr_model$coefficients[1])
Java

Java可采用Apache Commons Math库进行线性回归。

Simple regression

一元线性回归

regression = new SimpleRegression(); // new SimpleRegression(false); // without intercept
regression.addData(1d, 2d);
regression.addData(3d, 3d);
regression.addData(3d, 3d);
// double[][] data = { { 1, 3 }, {2, 5 }, {3, 7 }, {4, 14 }, {5, 11 }};
// regression.addData(data);

System.out.println(regression.getIntercept());
System.out.println(regression.getSlope());
Multiple linear regression

多元线性回归

OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
double[] y = new double[]{11.0, 12.0, 13.0, 14.0, 15.0, 16.0};
double[][] x = new double[6][];
x[0] = new double[]{0, 0, 0, 0, 0};
x[1] = new double[]{2.0, 0, 0, 0, 0};
x[2] = new double[]{0, 3.0, 0, 0, 0};
x[3] = new double[]{0, 0, 4.0, 0, 0};
x[4] = new double[]{0, 0, 0, 5.0, 0};
x[5] = new double[]{0, 0, 0, 0, 6.0};          
regression.newSampleData(y, x);
double[] beta = regression.estimateRegressionParameters();

关于作者:丹追兵:数据分析师一枚,编程语言python和R,使用Spark、Hadoop、Storm、ODPS。本文出自丹追兵的pytrafficR专栏,转载请注明作者与出处:https://segmentfault.com/blog...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65145.html

相关文章

  • 如何使用Python pyecharts绘制散点图

      小编写这篇文章的主要目的,主要是给大家去做一个解答,解答的内容主要是关于Python pyecharts的一些案例,包括如何使用它去进行绘制一个相关的散点图,怎么能够快速的去进行绘制。就具体的内容,下面就给大家详细解答下。  什么是散点图?  散点图是指在数理统计回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,由此趋势可以选择合适的函数进行经验分布的拟合...

    89542767 评论0 收藏0
  • 正则化&amp;&amp;逻辑回归

    摘要:以用于检测垃圾邮件的逻辑回归模型为例。逻辑回归的损失函数线性回归的损失函数是平方损失。正则化在逻辑回归建模中极其重要。 正则化:简单性 查看以下泛化曲线,该曲线显示的是训练集和验证集相对于训练迭代次数的损失。 showImg(https://segmentfault.com/img/bVbahiL?w=750&h=322);上图显示的是某个模型的训练损失逐渐减少,但验证损失最终增加。换...

    xushaojieaaa 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<