如何保持一个高度相关的变量在scikit-learn中淹没其余部分?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何保持一个高度相关的变量在scikit-learn中淹没其余部分?相关的知识,希望对你有一定的参考价值。

我正在建立一个分类器来检测唐纳德特朗普何时从@realDonaldTrump而不是员工发推文。它使用2016年的推文来训练模型,使用推文设备推断作者身份 - 如果消息是从android手机发送的,那就是特朗普;否则,它是一名职员。

现在,我正在使用Python sklearn BernoulliNB分类器,它使用两组功能。第一个是总统推文文本的词袋矢量。第二个是一个简单的二进制变量 - 推文是否有链接?

我正在使用pandas来处理数据和sklearn_pandas,以便更容易地组合这些功能。这是数据帧的片段:

                                                  text  year   type   link
0    RT @realDonaldTrump: Happy Birthday @DonaldJTr...  2016  staff   true
1    Happy Birthday @DonaldJTrumpJr!\nhttps://t.co/...  2016  staff   true
2    Happy New Year to all, including to my many en...  2016  trump  false
3    Russians are playing @CNN and @NBCNews for suc...  2016  trump  false
4    Join @AmerIcan32, founded by Hall of Fame lege...  2016  staff   true

这是我的代码的简化示例:

# Grab tweets, which have 'text', 'link' and 'type' columns
train_tweets = pd.read_json("data/condensed_2016.json")

vectorizer = DataFrameMapper([
('link', MultiLabelBinarizer()),
('text', CountVectorizer(
    analyzer = 'word', 
    tokenizer = None, 
    preprocessor = None, 
    stop_words = 'english', 
    max_features = 500) )
])

# Build vector of features from training set
train_data_features = vectorizer.fit_transform(train_tweets)

classify = BernoulliNB()
classify = classify.fit( train_data_features, train_tweets['type'] )

唯一的问题是link专栏与职员作者的关系非常密切 - 特朗普几乎从不在他的推文中包含任何类型的链接。因此,每当我对包含链接的推文进行分类并使用classify.predict_proba()检查概率时,我就会获得疯狂的特异性 - 比如职员编写推文的几率为99.999%。

这基本上使得词袋分析没有实际意义。我想这不是一件坏事,但它会使算法变得更脆弱。我能做些明显的事情来解决这个问题吗?

答案

您可以尝试随机欠量或超量采样,这将平衡数据的分布。但是,过采样会产生内存错误。尝试过取样后,根据您的数据可能会产生不良结果,所以我只想尝试两种方法。

RandomOverSampler:http://contrib.scikit-learn.org/imbalanced-learn/stable/generated/imblearn.over_sampling.RandomOverSampler.html#imblearn.over_sampling.RandomOverSampler

RandomUnderSampler:http://contrib.scikit-learn.org/imbalanced-learn/stable/generated/imblearn.under_sampling.RandomUnderSampler.html#imblearn.under_sampling.RandomUnderSampler

或者你可以使用under和over sampling的组合:http://contrib.scikit-learn.org/imbalanced-learn/stable/generated/imblearn.combine.SMOTETomek.html#imblearn.combine.SMOTETomek

以上是关于如何保持一个高度相关的变量在scikit-learn中淹没其余部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改自动布局约束

如何保持响应式图像相同的高度?

如何保持 UIScrollView 内容大小的最小高度?

如何修改 heightForRowAtIndexPath 使其调整到其中的 textview 的高度,同时在 textview 为空时保持最小高度?

即使使用动态高度网站,如何将页脚保持在底部

如何在更改屏幕宽度的同时保持响应式背景图像高度?