我的问题:如何训练只有正面和中性数据的分类器?
我正在建立一个用于教育目的的个性化文章推荐系统.我使用的数据来自Instapaper.
数据集
我只有积极的数据: - 我阅读和"喜欢"的文章,无论读/未读状态如何
和中性数据(因为我已经表达了对它的兴趣,但我以后可能不会喜欢它): - 未读的文章 - 我读过并标记为已阅读的文章,但我并不"喜欢"它
我没有的数据是负面数据: - 我没有发送给Instapaper以便稍后阅读的文章(我不感兴趣,虽然我浏览了那篇文章/文章) - 我可能没有点过的文章,但是我可能已经或可能没有存档它.
我的问题
在这样的问题中,基本上缺少负面数据.我已经想到了以下解决方案,但还没有解决它们:
1)将一些负数据输入分类器优点:立即负数据来教授分类器缺点:随着我喜欢的文章数增加,对分类器的负面数据影响变暗
2)将"中性"数据转换为负面数据优点:现在我得到了我需要的所有正面和(新)负面数据缺点:尽管中性数据对我很感兴趣,但我还是想得到关于这样的建议.文章,但也许作为一个价值较低的类.
我的问题:如何在svm模块(SVC类)中获得训练错误?
我试图根据所使用的训练数据的数量(或其他特征,如C/gamma)来绘制火车组和测试组的错误图.但是,根据SVM文档,没有这样的公开属性或方法来返回此类数据.我确实发现RandomForestClassifier确实暴露了oob_score_.
我正在尝试将一些文档分类为两个类,其中我使用TfidfVectorizer作为特征提取技术.
输入数据由包含大约十几个浮点数据字段,标签和文档正文的文本blob的数据行组成.为了使用正文,我应用了TfidfVectorizer并得到了一个稀疏矩阵(我可以通过toarray()转换为数组来检查).这个矩阵通常非常大,数千个维度 - 让我们称这个F的大小为1000 x 15000.
要在Scikit中使用分类器,我给它一个输入矩阵X,即(行数*特征数).如果我不使用身体,我可能有一个1000 x 15的X.
这是问题所在,假设我将这个F水平叠加到X,所以X将变成1000 x 15015,这会引入一些问题:1)前15个特征现在扮演的角色很小; 2)内存不足;
Scikit提供了一个仅使用TfidfVectorizer输入的示例,但没有说明如何在元数据旁边使用它.
我的问题是:你如何使用TfidfVectorizer输出和元数据来适应训练的分类器?
谢谢.