如何解决用分类朴素贝叶斯替换空值
我第一次尝试运行朴素贝叶斯,我需要运行二进制和多类。我正在使用分类数据,虚拟编码。为了处理逻辑回归的空值,我用 -1 填充了我的值。在尝试运行 CatNB 时,我第一次(意外地)使用空值运行了我的二进制训练集,并得到了以下错误。
[IN]: train_set,test_set = train_test_split(allyrs,test_size = 0.2,random_state = 42)
# Set up predictors,X is used for both Binary and Multi
[In] X = train_set.iloc[:,31 : 175]
# Set up binary y value
[IN]: y=train_set.iloc[:,29]
# Set up multi y value
[IN]: ym=train_set.iloc[:,30]
# first attempt to Feed through is says :
[IN]:from sklearn.naive_bayes import CategoricalNB
cat_NB = CategoricalNB()
cat_NB.fit(X,y)
CategoricalNB()
print(cat_NB.predict(X))
[OUT]: ValueError: Input contains NaN,infinity or a value too large for 'int'.
在这一点上,我一直回到我的标准化文件,在那里我虚拟编码并读取标准化我的数据,在编码之前我填充了我的空值。将我的数据集推回并重新导入并再次运行上面的代码并得到相同的消息:
[OUT]: ValueError: Input contains NaN,infinity or a value too large for 'int'.
感到困惑,因为我以为我已经填充了我的空值,我检查了我的 X 以查看是否有任何空值”
[IN}: X.isnull().sum()
[OUT]: BMI_C_-1.0 33
BMI_C_1.0 33
BMI_C_2.0 33
BMI_C_3.0 33
BMI_C_4.0 33
..
Vet_-1.0 33
Vet_1.0 33
Vet_2.0 33
Vet_7.0 33
Vet_9.0 33
Length: 144,dtype: int64
So I filled my "nulls" again
[IN]: X = X.fillna(value = -1)
#Go back an fill null with -1 because thats what worked for LR.
[IN]: X = X.fillna(value = -1)
[IN}: X.isnull().sum()
[OUT]: False
[IN]:cat_NB = CategoricalNB()
cat_NB.fit(X,y)
CategoricalNB()
print(cat_NB.predict(X))
[OUT]:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-121-a682b6ccaf81> in <module>
1 cat_NB = CategoricalNB()
2
----> 3 cat_NB.fit(X,y)
4
5 CategoricalNB()
~\anaconda3\lib\site-packages\sklearn\naive_bayes.py in fit(self,X,y,sample_weight)
1112 self : object
1113 """
-> 1114 return super().fit(X,sample_weight=sample_weight)
1115
1116 def partial_fit(self,classes=None,sample_weight=None):
~\anaconda3\lib\site-packages\sklearn\naive_bayes.py in fit(self,sample_weight)
613 self : object
614 """
--> 615 X,y = self._check_X_y(X,y)
616 _,n_features = X.shape
617 self.n_features_ = n_features
~\anaconda3\lib\site-packages\sklearn\naive_bayes.py in _check_X_y(self,y)
1170 X,y = self._validate_data(X,dtype='int',accept_sparse=False,1171 force_all_finite=True)
-> 1172 check_non_negative(X,"CategoricalNB (input X)")
1173 return X,y
1174
~\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_non_negative(X,whom)
1044
1045 if X_min < 0:
-> 1046 raise ValueError("Negative values in data passed to %s" % whom)
1047
1048
ValueError: Negative values in data passed to CategoricalNB (input X)
我很困惑,因为当我开始这个时,我在运行 Binary LogR/ 和 softmax 回归后立即拉了这个训练集,它没有抱怨空值......
我在这里看到一些帖子说,如果您有负值或空值,则不应使用多项式。我还看到可以使用高斯贝叶斯做贝叶斯。这是我最好的选择吗?或者我在这里做错了什么?与我一起工作的其中一个人对她填充 -1 的 NaN 值没有错误。有人可以在这里帮助我吗。
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。