目前我正在学校开展项目,我有一项非常特别的任务。我的工作是从facebook上的某个页面中删除数据,将其放入学习模型,其中应该有1个输入作为List并输出为Int32。
首先,让我简要解释一下我已经设计的算法:
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
的正确方法。我知道用零实现数组的方法是错误的,但它是迄今为止我提出的唯一解决方案。如果有人告诉我在这种情况下应该使用回归的方式并且有助于选择合适的算法,我将不胜感激。干杯!
答案 0 :(得分:1)
在Accord.NET中浏览不同的回归算法后,我提出了FanChenLinSupportVectorRegression
,它是Accord.NET Machine Learning
库的一部分。我相信,Fan Chen Lin是这个算法的主要贡献者之一,因为它是以他的名字命名的。
算法使用支持向量回归(SVM)的概念。
FanChenLinSupportVectorRegression<TKernel>
,其中Kernel
获取或设置内核函数用于创建内核支持向量机。如果设置了此属性,则UseKernelEstimation将设置为false。
回归函数将第一个输入作为一个数组,由双数组(在我们的例子中是某个帖子中的单词的权重)组成,第二个是双数组,由喜欢的数量组成。
重要事项:权重子数组必须与第二个输入中的相似数量相对应,first sub-array
在{0}索引中的likes
数量相同{1}}数组,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});
我已经使用相同值的交换输入测试了此模型,结果非常好且准确。模型在大输入上也很好,但是需要更多的训练。希望这有助于将来的任何人。