Javascript中的线性回归

如何解决Javascript中的线性回归

| 我想在网络浏览器中用Java最小二乘拟合。 当前,用户使用HTML文本输入输入数据点信息,然后我使用jQuery抓取该数据并使用Flot将其绘制成图形。 用户输入他们的数据点后,我想向他们显示“最合适的行”。我想我会计算线性,多项式,指数和对数方程,然后选择具有最高“ 0”值的方程。 我似乎找不到任何可以帮助我完成此操作的库。我偶然发现了jStat,但据我所知,它完全缺少文档,在探究了源代码之后,它似乎没有内置任何线性回归功能-我纯粹是以此为基础在函数名称上。 有谁知道任何提供简单回归分析的Javascript库? 希望我可以像这样使用该库... 如果我在数组
var points = [[3,4],[15,45],...[23,78]]
中有一些散射点,我将能够将其交给诸如
lin_reg(points)
之类的函数,如果线性方程为
y = 7.12 x + 3
,它将返回类似于
[7.12,3]
的东西。     

解决方法

        什么样的线性回归?对于像最小二乘法这样的简单事物,我自己编写程序即可: http://mathworld.wolfram.com/LeastSquaresFitting.html 那里的数学并不难,可以试一小时左右,如果太难了,请告诉我,我可以尝试一下。 编辑: 找到做到这一点的人: http://dracoblue.net/dev/linear-least-squares-in-javascript/159/     ,        我为手头问题找到的最简单的解决方案可以在以下文章中找到: http://trentrichardson.com/2010/04/06/compute-linear-regressions-in-javascript/ 请注意,除了线性方程式,它还会返回R2分数,这可能很有用。 **编辑** 这是实际的代码片段:
function linearRegression(y,x){
        var lr = {};
        var n = y.length;
        var sum_x = 0;
        var sum_y = 0;
        var sum_xy = 0;
        var sum_xx = 0;
        var sum_yy = 0;

        for (var i = 0; i < y.length; i++) {

            sum_x += x[i];
            sum_y += y[i];
            sum_xy += (x[i]*y[i]);
            sum_xx += (x[i]*x[i]);
            sum_yy += (y[i]*y[i]);
        } 

        lr[\'slope\'] = (n * sum_xy - sum_x * sum_y) / (n*sum_xx - sum_x * sum_x);
        lr[\'intercept\'] = (sum_y - lr.slope * sum_x)/n;
        lr[\'r2\'] = Math.pow((n*sum_xy - sum_x*sum_y)/Math.sqrt((n*sum_xx-sum_x*sum_x)*(n*sum_yy-sum_y*sum_y)),2);

        return lr;
}
要使用它,您只需要传递两个数组,即known_y \和known_x \,那么您可以通过以下方法:
var known_y = [1,2,3,4];
var known_x = [5.2,5.7,5.0,4.2];

var lr = linearRegression(known_y,known_x);
// now you have:
// lr.slope
// lr.intercept
// lr.r2
    ,        我找到了这个很棒的JavaScript库。 它非常简单,并且看起来运行良好。 我也不太推荐Math.JS。     ,        查看 https://web.archive.org/web/20150523035452/https://cgwb.nci.nih.gov/cgwbreg.html(JavaScript回归计算器)-纯JavaScript,而非对服务器的CGI调用。数据和处理仍保留在您的计算机上。完成R风格的结果和R代码,以检查工作和结果的可视化。 请参阅源代码以获取OLS的嵌入式JavaScript实现以及与结果相关的统计信息。 该代码是我将GSL库函数移植到JavaScript的努力。 该代码是在GPL下发布的,因为它基本上是GPL许可的Gnu科学图书馆(GSL)代码的行移植行。 编辑:保罗·路特斯(Paul Lutus)还提供了一些用于回归的GPL代码,网址为:http://arachnoid.com/polysolve/index.html     ,        这是一个片段,它将采用三元组(x,y,r)的数组,其中r是(x,y)数据点的权重并返回[a,b],使得Y = a * X + b近似于数据。
// return (a,b) that minimize
// sum_i r_i * (a*x_i+b - y_i)^2
function linear_regression( xyr )
{
    var i,x,y,r,sumx=0,sumy=0,sumx2=0,sumy2=0,sumxy=0,sumr=0,a,b;

    for(i=0;i<xyr.length;i++)
    {   
        // this is our data pair
        x = xyr[i][0]; y = xyr[i][1]; 

        // this is the weight for that pair
        // set to 1 (and simplify code accordingly,ie,sumr becomes xy.length) if weighting is not needed
        r = xyr[i][2];  

        // consider checking for NaN in the x,y and r variables here 
        // (add a continue statement in that case)

        sumr += r;
        sumx += r*x;
        sumx2 += r*(x*x);
        sumy += r*y;
        sumy2 += r*(y*y);
        sumxy += r*(x*y);
    }

    // note: the denominator is the variance of the random variable X
    // the only case when it is 0 is the degenerate case X==constant
    b = (sumy*sumx2 - sumx*sumxy)/(sumr*sumx2-sumx*sumx);
    a = (sumr*sumxy - sumx*sumy)/(sumr*sumx2-sumx*sumx);

    return [a,b];
}
    ,        简单线性回归,具有变化量度(平方总和=回归平方和+误差平方和),估计SEE的标准误差(残差标准误差),确定系数R2和相关性R.
const regress = (x,y) => {
    const n = y.length;
    let sx = 0;
    let sy = 0;
    let sxy = 0;
    let sxx = 0;
    let syy = 0;
    for (let i = 0; i < n; i++) {
        sx += x[i];
        sy += y[i];
        sxy += x[i] * y[i];
        sxx += x[i] * x[i];
        syy += y[i] * y[i];
    }
    const mx = sx / n;
    const my = sy / n;
    const yy = n * syy - sy * sy;
    const xx = n * sxx - sx * sx;
    const xy = n * sxy - sx * sy;
    const slope = xy / xx;
    const intercept = my - slope * mx;
    const r = xy / Math.sqrt(xx * yy);
    const r2 = Math.pow(r,2);
    let sst = 0;
    for (let i = 0; i < n; i++) {
       sst += Math.pow((y[i] - my),2);
    }
    const sse = sst - r2 * sst;
    const see = Math.sqrt(sse / (n - 2));
    const ssr = sst - sse;
    return {slope,intercept,r2,sse,ssr,sst,sy,sx,see};
}
regress([1,4,5],[1,3]);
    ,        基于Nic Mabon的答案。
function linearRegression(x,y)
{
    var xs = 0;  // sum(x)
    var ys = 0;  // sum(y)
    var xxs = 0; // sum(x*x)
    var xys = 0; // sum(x*y)
    var yys = 0; // sum(y*y)

    var n = 0;
    for (; n < x.length && n < y.length; n++)
    {
        xs += x[n];
        ys += y[n];
        xxs += x[n] * x[n];
        xys += x[n] * y[n];
        yys += y[n] * y[n];
    }

    var div = n * xxs - xs * xs;
    var gain = (n * xys - xs * ys) / div;
    var offset = (ys * xxs - xs * xys) / div;
    var correlation = Math.abs((xys * n - xs * ys) / Math.sqrt((xxs * n - xs * xs) * (yys * n - ys * ys)));

    return { gain: gain,offset: offset,correlation: correlation };
}
然后y \'= x *增益+偏移量。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-