我在预处理一个数据集。我对其中的一列进行了二值化。二值化后,我认为这些值是不正确的。数据有303个观测值(行)和14个特征(列)。我二值化的列是最后一列。
这是我代码的一部分-
import pandas as pd import numpy as np #importing the dataset header_names = ['age','sex','cp','trestbps','chol','fbs','restecg','thalach','exang','oldpeak','slope','ca','thal','num'] dataset = pd.read_csv('E:/HCU proj doc/EHR dataset/cleveland_data.csv', names= header_names) array = dataset.values # binarize num from sklearn.preprocessing import Binarizer x = array[:,13:] binarize = Binarizer(threshold=0.0).fit(x) transform_binarize = binarize.transform(x) array[:,13:]=transform_binarize print(transform_binarize)
这是原始数据列的样貌-
0,2,1,0,0.........1,0,3,1,1,2
这是上述代码的输出-
[[0.] [1.] [1.] [0.] [0.] [0.] [1.] [0.] [1.] [1.] [0.] [0.] [1.] [0.] [0.] [0.] [1.] [0.] [0.] [0.] [0.] [0.] [1.] [1.] [1.] [0.] [0.] [0.] [0.] [1.] [0.] [1.] [1.] [0.] [0.] [0.] [1.] [1.] [1.] [0.] [1.] [0.] [0.] [0.] [1.] [1.] [0.] [1.] [0.] [0.] [0.] [0.] [1.] [0.] [1.] [1.] [1.] [1.] [0.] [0.] [1.] [0.] [1.] [0.] [1.] [1.] [1.] [0.] [1.] [1.] [0.] [1.] [1.] [1.] [1.] [0.] [1.] [0.] [0.] [1.] [0.] [0.] [0.] [1.] [0.] [0.] [0.] [0.] [0.] [0.] [0.] [1.] [0.] [0.] [0.] [1.] [1.] [1.] [0.] [0.] [0.] [0.] [0.] [0.] [1.] [0.] [1.] [1.] [1.] [1.] [1.] [1.] [0.] [1.] [1.] [0.] [0.] [0.] [1.] [1.] [1.] [1.] [0.] [1.] [1.] [0.] [1.] [1.] [0.] [0.] [0.] [0.] [0.] [0.] [0.] [0.] [1.] [1.] [1.] [0.] [0.] [1.] [0.] [1.] [0.] [1.] [1.] [0.] [0.] [0.] [0.] [0.] [0.] [1.] [1.] [1.] [1.] [1.] [1.] [0.] [0.] [1.] [0.] [0.] [0.] [0.] [0.] [0.] [1.] [0.] [1.] [0.] [1.] [0.] [1.] [1.] [0.] [1.] [0.] [0.] [1.] [1.] [0.] [0.] [1.] [0.] [0.] [1.] [1.] [1.] [0.] [1.] [1.] [1.] [0.] [1.] [0.] [0.] [0.] [1.] [0.] [0.] [0.] [0.] [0.] [1.] [1.] [1.] [0.] [1.] [0.] [1.] [0.] [1.] [1.] [0.] [0.] [0.] [0.] [0.] [0.] [0.] [0.] [1.] [1.] [0.] [0.] [0.] [1.] [1.] [0.] [1.] [1.] [0.] [0.] [1.] [1.] [1.] [0.] [0.] [0.] [0.] [0.] [1.] [0.] [1.] [1.] [1.] [1.] [0.] [0.] [1.] [0.] [0.] [0.] [0.] [0.] [0.] [0.] [1.] [0.] [1.] [0.] [0.] [1.] [1.] [1.] [1.] [1.] [0.] [1.] [0.] [1.] [0.] [1.] [0.] [0.] [0.] [1.] [0.] [1.] [0.] [1.] [0.] [1.] [1.] [1.] [0.] [0.] [0.] [1.] [0.] [1.] [1.] [1.] [0.] [1.] [1.] [1.] [1.] [1.] [1.] [0.]]
我认为最后几个值是不正确的。我不明白为什么会这样。
回答:
如果我假设这是从这个UCI仓库中获取的心脏病数据集,并且csv文件是这个,那么这些二值化的值是正确的。你使用的原始数据列在最后一行有一个0
,我想你错过了这一点,试试这个代码
for idx in range(0,len(x)): print idx,x[idx],transform_binarize[idx]
输出
278 [1L] [1.]279 [0L] [0.]280 [2L] [1.]281 [0L] [0.]282 [3L] [1.]283 [0L] [0.]284 [2L] [1.]285 [4L] [1.]286 [2L] [1.]287 [0L] [0.]288 [0L] [0.]289 [0L] [0.]290 [1L] [1.]291 [0L] [0.]292 [2L] [1.]293 [2L] [1.]294 [1L] [1.]295 [0L] [0.]296 [3L] [1.]297 [1L] [1.]298 [1L] [1.]299 [2L] [1.]300 [3L] [1.]301 [1L] [1.]302 [0L] [0.] #<--- 我认为你在读取数据集时错过了这一行
如果你尝试这个代码,你会发现二值化器的工作完全符合预期。