我有以下代码,该代码旨在接受scikit-learn的DecisionTreeClassifier的一些培训和测试数据。在我希望将.predict函数的输出保存到CSV之前,它会起作用。到目前为止的代码是:
import numpy as np
import pandas as pd
from sklearn import tree
with open('data/training.csv', 'r') as f:
df = pd.read_csv(f, index_col=None)
df['Num_Labels'] = df.Label.map(lambda x: '-1' if x == 's' else '1') # Convert labels to '0' or '1'.
Train_values = df.iloc[:, 1:31].values
Train_labels = df.iloc[:, 33:34].values
# print Train_values.values
# print type(Train_values.values)
with open('data/test.csv', 'r') as f2:
df2 = pd.read_csv(f2, index_col=None)
Test_values = df2.iloc[:, 1:31].values
# #----------------------------------------------------------------------------------------------
X = Train_values
Y = Train_labels
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
Pred = clf.predict(Test_values)
#print Pred
#print type(Pred[:1])
np.savetxt('Output.csv', Pred, delimiter =' ')
终端输出如下:
/usr/bin/python2.7 /home/amit/PycharmProjects/HB/Read.py
Traceback (most recent call last):
File "/home/amit/PycharmProjects/HB/Read.py", line 38, in <module>
np.savetxt('Output.csv', Pred, delimiter =' ')
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1073, in savetxt
fh.write(asbytes(format % tuple(row) + newline))
TypeError: float argument required, not str
['1' '-1' '-1' ..., '1' '1' '1']
<type 'numpy.ndarray'>
Process finished with exit code 1
最有可能与之混为一谈Pred
。中的savetxt
代码npyio.py
非常简单:
for row in X:
fh.write(asbytes(format % tuple(row) + newline))
这将逐行读取X
(Pred
在这种情况下为输入数组)。format
在这种情况下%f %f %f
,格式字符串的占位符与一行中的元素(即列数)一样多。错误消息抱怨向量中除了浮点值之外还有其他东西row
。此外,错误消息看起来好像是短文本字符串,而不是浮点数。
我的猜测是,Pred
是ndarray
。如果不是这样,那将很奇怪。但是,它可能是字符串数组,而不是浮点数或其他数字的数组!
您几乎可以在尝试时进行跟踪,但是可以:
print Pred.dtype
如果是S3
,则您有一个字符串数组。在这种情况下,我建议你检查的数据类型X
和Y
是否正确。如果它们不是数字,那么事情可能会变得有些奇怪。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句