目前,我正在学校做我的项目,我有一个不寻常的任务。我的工作是从facebook上的某个页面中抓取数据,把它放到学习模型中,在那里应该有一个输入作为列表,输出作为Int32。
首先,让我简单地解释一下我已经设计的算法:
Dictionary<String,List<double[],int>>,它表示postId:[wordWeights],amountOfLikes as
23425234_35242352:[0.027,0.031,0.009,0.01233],89
我必须用不同的职位和他们的喜好来训练我的模特。为此,本文选择了在Accord.NET上使用C#库,并对其简单线性回归类进行了分析。
首先,我看到我可以使用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。我知道用零实现数组的方法是错误的,但到目前为止,这是我想出的唯一解决方案。如果有人告诉我在这种情况下应该如何使用回归,并帮助选择合适的算法,我将不胜感激。干杯!
发布于 2018-04-12 17:40:48
在浏览了Accord.NET中不同的回归算法之后,我想出了FanChenLinSupportVectorRegression,它是Accord.NET Machine Learning库的一部分。我相信范陈霖是这个算法的主要贡献者之一,因为它是以他的名字命名的。
算法采用支持向量回归(SVM)的概念。
FanChenLinSupportVectorRegression<TKernel>,其中Kernel获取或设置用于创建内核支持向量机的内核函数。如果设置了此属性,则UseKernelEstimation将设置为false。
回归函数将第一个输入作为数组,由两个数组组成(在我们的例子中,是某个帖子中单词的权重),第二个是由喜欢的数量组成的双重数组。
的重要性:权重的子数组必须与第二个输入中的喜好数量相对应,这样first sub-array在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});我用相同值的交换输入测试了这个模型,结果非常好和准确。模型在大输入上也很好,但是需要更多的培训。希望这对未来的任何人都有帮助。
https://stackoverflow.com/questions/49788291
复制相似问题