【问题标题】:Python Classifier SklearnPython 分类器 Sklearn
【发布时间】:2016-04-15 06:23:33
【问题描述】:

我对 Python 和 SKLearn 还是很陌生。我正在尝试制作一个简单的分类器,但遇到了问题。我一直在关注一些不同的教程,但是当我尝试使用 .fit 方法时出现错误。我是这个概念的新手,并且已经尝试过文档,但发现很难理解,任何人都可以帮助我错误或指出正确的方向。

错误背后的想法是值超出了 dtype 的范围,因为我已经转换了所有缺失值或 nan 值,但错误仍然出现

代码

def main():
setup_files()

imputer = Imputer()

#the training data minus id and type:
t_num_data = load_csv(training_set_file_path, range(1, 17))
t_num_data_imputed = imputer.fit_transform(t_num_data)
print(t_num_data_imputed)

#the training type column
t_type_col = load_csv(training_set_file_path, 17, dtype=np.dtype((str, 5)))
#the query data minus id and type:
q_data = load_csv(queries_file_path, range(1, 17))
#the query id column
q_id = load_csv(queries_file_path, 0, dtype=np.dtype((str, 10)))


#fit data above to DTC and predict import
model = tree.DecisionTreeClassifier(criterion='entropy')
model.fit_transform(t_num_data, t_type_col)
predictions = model.predict(q_data)


#output the predictions:
with open(solutions_file_path, 'w') as f:
    for i in range(len(predictions)):
        f.write("{},{}\n".format(q_id[i], predictions[i]))


#fit data above to DTC and predict import
model = tree.DecisionTreeClassifier(criterion='entropy')
model.fit(t_num_data, t_type_col)
predictions = model.predict(q_data)


#output the predictions:
with open(solutions_file_path, 'w') as f:
    for i in range(len(predictions)):
        f.write("{},{}\n".format(q_id[i], predictions[i]))

错误

Traceback (most recent call last):
  File "/Users/Rory/Desktop/classifier.py", line 71, in <module>
main()
  File "/Users/Rory/Desktop/classifier.py", line 60, in main
model.fit_transform(t_num_data, t_type_col)
  File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/base.py", line 458, in fit_transform
return self.fit(X, y, **fit_params).transform(X)
  File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/tree/tree.py", line 154, in fit
    X = check_array(X, dtype=DTYPE, accept_sparse="csc")
  File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py", line 398, in check_array
_assert_all_finite(array)
  File "/Users/Rory/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py", line 54, in _assert_all_finite
" or a value too large for %r." % X.dtype)
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

【问题讨论】:

  • 错误说明了一切。您的 t_num_data 具有 inf 或 nan 值。尝试打印最小值/最大值
  • 是否有一个简单的解决方案,或者是否在数据本身内或是否在数据本身中?
  • @imaluengo 当我打印最大值和最小值时,我都得到了 nan
  • 可能有可能的原因.. 例如,您的数据可能有一些缺失值。可以使用 scikit learn 的预处理模块。
  • @imaluengo,我已经稍微更新了这个问题,显示了我是如何转换值的,但错误仍然存​​在,有没有办法四舍五入浮点数或增加 dtype?

标签: python scikit-learn


【解决方案1】:

问题在于您的 NaN 值。估计 NaN 的方法有一长串。你可以试试:

t_num_data.fillna(0)

它将用 0 填充所有缺失值,然后您的分类器将起作用,但可能不是很准确。还有其他方法可以取平均值,基于最近邻的估计等等。但这应该让你的代码现在可以工作。

【讨论】:

    猜你喜欢
    • 2021-07-19
    • 2018-10-31
    • 2015-07-19
    • 2019-07-14
    • 2017-08-08
    • 2020-09-09
    • 2017-09-30
    • 2016-08-10
    • 2014-01-02
    相关资源
    最近更新 更多