我正在嘗試使用accord.net進行文本分類。但是我找不到表示稀疏矢量和矩陣的方法。例如,我們有很多文本,並且在使用ngrams和散列進行標記之後,每個文本都用一個權重(tf)表示爲特徵索引(由featureHasher給出)。並且不可能將所有數據作爲非稀疏矩陣加載到內存中。有沒有辦法做增量處理或表示稀疏矩陣或用稀疏數據做特徵減少?如何使用Accord.Net進行文本分類?
2
A
回答
2
不幸的是,目前並不是所有的模型和方法都支持稀疏矩陣。但是,如果您嘗試進行文本分類,則可以使用具有稀疏內核的支持向量機進行分類。
可以在Accord.Statistics.Kernels.Sparse命名空間中找到稀疏內核,例如SparseLinear和SparseGaussian。這些內核希望數據以LibSVM的稀疏格式提供。這個格式的規範可以在LibSVM's FAQ的Why sometimes not all attributes of a data appear in the training/model files?這個問題下找到。
基本上,在這種格式中,作爲
1 0 2 0
被表示爲
1:1 3:2
,或者換句話說,將被表示的特徵向量,作爲位置的列表:值雙,其中職位起始於1。
下面是關於如何使用支持向量機與使用SVM的稀疏線性格式的SparseLinear內核的例子:
// Example AND problem
double[][] inputs =
{
new double[] { }, // 0 and 0: 0 (label -1)
new double[] { 2,1 }, // 0 and 1: 0 (label -1)
new double[] { 1,1 }, // 1 and 0: 0 (label -1)
new double[] { 1,1, 2,1 } // 1 and 1: 1 (label +1)
};
// Dichotomy SVM outputs should be given as [-1;+1]
int[] labels =
{
// 0, 0, 0, 1
-1, -1, -1, 1
};
// Create a Support Vector Machine for the given inputs
// (sparse machines should use 0 as the number of inputs)
var machine = new KernelSupportVectorMachine(new SparseLinear(), inputs: 0);
// Instantiate a new learning algorithm for SVMs
var smo = new SequentialMinimalOptimization(machine, inputs, labels);
// Set up the learning algorithm
smo.Complexity = 100000.0;
// Run
double error = smo.Run(); // should be zero
double[] predicted = inputs.Apply(machine.Compute).Sign();
// Outputs should be -1, -1, -1, +1
Assert.AreEqual(-1, predicted[0]);
Assert.AreEqual(-1, predicted[1]);
Assert.AreEqual(-1, predicted[2]);
Assert.AreEqual(+1, predicted[3]);
相關問題
- 1. 使用libsvm進行文本分類c#
- 2. 使用Weka + NaiveBayes分類器+文本分類進行分類
- 3. 如何使用SVM和KNN對文本文檔進行分類
- 4. Accord.NET:如何訓練Boost分類器
- 5. 使用StanfordNLP分類器進行分詞的文本分類器
- 6. 如何使用Knime對文本進行分類
- 7. 如何使用scikit-learn對文本對進行分類?
- 8. 如何使用libsvm進行文本分類?
- 9. In Accord.Net如何使用One-Class SVM進行異常檢測?
- 10. 如何使用記事本對文本行進行分組++
- 11. 如何用估算器對文本進行分類?
- 12. 如何使用文本挖掘進行文檔分析?
- 13. 使用Visual Basic進行文件分類
- 14. 使用Microsoft Azure進行文本分析
- 15. 如何使用SVM分類器進行分類?
- 16. 如何使用tensor2tensor分類文本?
- 17. 使用LibSVM進行分類
- 18. 使用AlphaFun進行分類
- 19. 如何使用tflearn深度學習進行文檔分類
- 20. 如何使用Rapidminer處理XML文件進行分類
- 21. 如何使用sklearn庫進行樸素貝葉斯文本分類?
- 22. 如何在數據集中使用keras RNN進行文本分類?
- 23. 不能使用Accord.NET
- 24. 使用神經網絡進行文本分類
- 25. 使用NLP讓系統學會對文本進行分類
- 26. 在php中使用weka進行文本分類
- 27. scikit-learn:使用自定義標籤對文本進行分類
- 28. 使用RNN對可變長度的文本進行分類
- 29. 使用doc2vec和LogisticRegression對輸入文本進行分類
- 30. 使用java libsvm進行文本分類 - 模型,參數選擇
稀疏矢量你還需要在在訓練時間在內存中的輸入和輸出,也可以培養分批? – Telavian
你仍然需要它們在內存中。不幸的是,對於SVM,批量訓練非常棘手。但是,如果您使用的是64位Windows,則可以使用https://msdn.microsoft.com/en-us/library/hh285054(v=vs.110)分配總大小大於2 GB的陣列。 aspx,並讓操作系統根據需要將其交換出來 – Cesar
這取決於矩陣的大小。然而,完全可能的尺寸爲50,000x500,000的double類型的稀疏矩陣需要大約1500 GB的空間。如果交換空間不斷被使用,這也可能需要永遠培訓。 – Telavian