我从未使用过 Perl,这就是为什么我需要一点帮助才能理解以下代码:
for ($i=0; $i<@ARGV; $i++) {
open F, $ARGV[$i];
while (<F>) {
chomp;
($y,@x) = split;
print $y;
map { print " *$_ $i$_" } @x;
print "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
我看到它遍历一个文件(每行?),然后while(<F>),意味着不为空?chomp 从换行符、空格等中去除字符串。
perl 的一般概念让我感到困惑,谁能向我解释这个例子?
我使用scikit-learn来创建文档的特征向量.我的目标是使用这些特征向量创建二分类器(Genderclassifier).
我希望将k-top字作为特征,因此来自两个labeldocuments的k个最高计数字(k = 10 - > 20个特征,因为2个标签)
我的两个文档(label1document,label2document)都填充了这样的实例:
user:somename, post:"A written text which i use"
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的理解是我使用来自两个文档的所有实例的所有文本来创建一个带有计数的词汇表(两个标签的计数,所以我可以比较labeldata):
#These are my documents with all text
label1document = "car eat essen sleep sleep"
label2document = "eat sleep woman woman woman woman"
vectorizer = CountVectorizer(min_df=1)
corpus = [label1document,label2document]
#Here I create a Matrix with all the countings of the words from both documents
X = vectorizer.fit_transform(corpus)
Run Code Online (Sandbox Code Playgroud)
问题1:我需要在fit_transform中添加什么来获取两个标签中计算最多的单词?
X_new = SelectKBest(chi2, k=2).fit_transform( ?? )
Run Code Online (Sandbox Code Playgroud)
最后,我想要训练数据(实例),如下所示:
<label> <feature1 : value> ... <featureN: value>
Run Code Online (Sandbox Code Playgroud)
问题2:我如何从那里开始获取此培训数据?
奥利弗
我正在尝试创建一个预测作者年龄的回归模型。我使用 (Nguyen et al,2011) 作为我的基础。
使用词袋模型,我计算每个文档(来自董事会的帖子)的单词出现次数,并为每个帖子创建向量。
我通过使用 top-k (k=number) 最常用的词作为特征来限制每个向量的大小(不使用停用词)
Vectorexample_with_k_8 = [0,0,0,1,0,3,0,0]
Run Code Online (Sandbox Code Playgroud)
我的数据通常像示例中一样稀疏。
当我在测试数据上测试模型时,我得到的 r² 分数非常低(0.00-0.1),有时甚至是负分。该模型总是预测相同的年龄,这恰好是我的数据集的平均年龄,如我的数据分布(年龄/数量)所示:

我使用了不同的回归模型:线性回归、套索、来自 scikit-learn 的 SGDRegressor,但没有改进。
所以问题是:
1.如何提高r²分数?
2.我是否必须更改数据以更好地适应回归?如果是用什么方法?
3.我应该使用哪种回归器/方法进行文本分类?