如何保持一个高度相关的变量在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中淹没其余部分?的主要内容,如果未能解决你的问题,请参考以下文章
如何修改 heightForRowAtIndexPath 使其调整到其中的 textview 的高度,同时在 textview 为空时保持最小高度?