【问题标题】:Regression analyses in Accord.NETAccord.NET 中的回归分析
【发布时间】:2018-04-13 01:40:48
【问题描述】:

目前我正在学校做我的项目,我有一些非同寻常的任务。我的工作是从 facebook 上的某个页面抓取数据并将其放入学习模型中,其中应该有 1 个输入为 List,输出为 Int32。

首先,让我简单解释一下我已经设计的算法:

  1. 抓取数据
  2. 阻止它
  3. 删除了大写、标点、表情符号和空格
  4. 同根词合并
  5. 计算单词的出现次数并为每个单词分配计数值
  6. 执行 tf-idf 计算以提取每个帖子中每个单词的权重 现在,我有一个Dictionary<String,List<double[],int>>,它代表

postId:[wordWeights],amountOfLikes作为

23425234_35242352:[0.027,0.031,0.009,0.01233],89

我必须用不同的帖子和他们的喜好来训练我的模型。为此,我们选择在 C# 上使用 Accord.NET 库,并到目前为止分析了他们的简单线性回归类。

首先,我看到我可以使用 OrdinaryLeastSqure 并为其提供可能的输入和输出

double[] input = {0.123,0.23,0.09}
double[] output = {98,0,0}
OrdinaryLeastSquares ols = new OrdinaryLeastSquares();
regression = ols.Learn(inputs, output);

如您所见,数组中的输入数量应与输出数量相匹配,因此,我用零来实现它。结果,我得到了明显的错误输出。我无法想出将我的数据提供给Linear Regression Class 的正确方法。我知道用零填充数组的方法是错误的,但它是迄今为止我想出的唯一解决方案。如果有人告诉我在这种情况下我应该如何使用回归并帮助选择合适的算法,我将不胜感激。干杯!

【问题讨论】:

    标签: c# .net machine-learning regression accord.net


    【解决方案1】:

    在浏览了 Accord.NET 中的不同回归算法后,我想到了 FanChenLinSupportVectorRegression,它是 Accord.NET Machine Learning 库的一部分。我相信,范陈林是这个算法的主要贡献者之一,因为它是以他的名字命名的。

    算法使用支持向量回归 (SVM) 的概念。

    FanChenLinSupportVectorRegression<TKernel>,其中Kernel获取或设置用于创建内核支持向量机的内核函数。如果设置了此属性,则 UseKernelEstimation 将设置为 false。

    回归函数将第一个输入作为一个数组,由双精度数组(在我们的例子中是某个帖子中单词的权重)和第二个双精度数组组成,它由喜欢的数量组成。

    重要提示: 权重子数组必须与第二个输入中的点赞数量相对应,这样first sub-arraylikes 的[0] 索引下的点赞数量数组,second sub-array 应该在likes 数组等中的 [1] 索引下有类似的数量。

    例子:

    //Suppose those are posts with tf-idf weights
    double[][] inputs =
    {
      new[] { 3.0, 1.0 },
      new[] { 7.0, 1.0 },
      new[] { 3.0, 1.0 },
      new[] { 3.0, 2.0 },
      new[] { 6.0, 1.0 },
    };
    //amount of likes each corresponding post scored
    double[] outputs = {2.0, 3.0, 4.0, 11.0, 6.0};
    //Using FanChenLinSupportVectorRegression<Kernel>
    var model = new FanChenLinSupportVectorRegression<Gaussian>();
    //Train model and feed it with tf-idf of each post and corresponding like amount
    var svm = model.Learn(inputs, outputs);
    //Run a sample tf-idf input to get a prediction
    double result = svm.Score(new double[] { 2.0,6.0});
    

    我已经用相同值的交换输入测试了这个模型,结果非常好和准确。模型在大输入上也能很好地工作,但需要更多的训练。希望这对将来的任何人都有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2015-12-10
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多