Accord.NET 中的回归分析

Regression analyses in Accord.NET

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

首先简单介绍一下我已经设计的算法:

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

postId:[wordWeights],amountOfLikes 作为

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

我必须用不同的 post 和他们喜欢的东西来训练我的模型。为此,已选择在 C# 上使用 Accord.NET 库,到目前为止分析了它们的简单线性回归 Class.

首先,我看到我可以使用 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 的正确方法。我知道用零填充数组的方法是错误的,但这是迄今为止我想出的唯一解决方案。如果有人告诉我在这种情况下应该如何使用回归并帮助选择合适的算法,我将不胜感激。干杯!

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

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

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

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

重要提示: 权重子数组必须对应于第二个输入中的点赞数量,使得 first sub-array 的点赞数量低于 [0 ] likes 数组中的索引,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});

我用相同值的交换输入测试了这个模型,结果非常好而且准确。模型也适用于大输入,但需要更多培训。希望这对以后的任何人都有帮助。