【问题标题】:I'm brand new to Jupyter and have no idea what is wrong with what I am doing我是 Jupyter 的新手,不知道我在做什么有什么问题
【发布时间】:2023-04-02 19:42:01
【问题描述】:

我尝试使用 sklearn 并遇到错误,但我不知道出了什么问题。 这是我的代码:

import pandas as pdd
from sklearn.tree import DecisionTreeClassifier
df = pd.read_csv('vgsales.csv')
X = df.drop(columns=['Name','Platform','Publisher','Genre'])#input
y = df['Rank']#output
model = DecisionTreeClassifier()
model.fit(X, y)
predictions = model.predict([16598],[])
predictions

这是我的错误:

ValueError                                Traceback (most recent call last)
<ipython-input-28-152586bc1b23> in <module>()
      8 df = df.reset_index()
      9 model = DecisionTreeClassifier()
---> 10 model.fit(X, y)
     11 predictions = model.predict([16598],[])
     12 predictions

/home/frankie/anaconda2/lib/python2.7/site-packages/sklearn/tree/tree.pyc in fit(self, X, y, 
sample_weight, check_input, X_idx_sorted)
    788             sample_weight=sample_weight,
    789             check_input=check_input,
--> 790             X_idx_sorted=X_idx_sorted)
    791         return self
    792 

/home/frankie/anaconda2/lib/python2.7/site-packages/sklearn/tree/tree.pyc in fit(self, X, y, 
sample_weight, check_input, X_idx_sorted)
    114         random_state = check_random_state(self.random_state)
    115         if check_input:
--> 116             X = check_array(X, dtype=DTYPE, accept_sparse="csc")
    117             y = check_array(y, ensure_2d=False, dtype=None)
    118             if issparse(X):

/home/frankie/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.pyc in 
check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, 
ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    451                              % (array.ndim, estimator_name))
    452         if force_all_finite:
--> 453             _assert_all_finite(array)
    454 
    455     shape_repr = _shape_repr(array.shape)

/home/frankie/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.pyc in 
_assert_all_finite(X)
     42             and not np.isfinite(X).all()):
     43         raise ValueError("Input contains NaN, infinity"
---> 44                          " or a value too large for %r." % X.dtype)
     45 
     46 

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

任何帮助将不胜感激,我正在输入这些内容,因为 stackoverflow 说我需要更多文本

【问题讨论】:

  • 输入包含空值,使用df.fillna替换它们
  • 也与错误无关,但您应确保 X 不包含您预测的字段

标签: python jupyter-notebook sklearn-pandas


【解决方案1】:

代码中的错误

当您为 train 定义 X 和 Y 时,矩阵 X 将包含 de 列 Rank你也应该放弃它。否则,您的决策树将是“愚蠢的”,因为您将输出作为输入。这是一个巨大的错误。求解:

X = df.drop(columns=['Name','Platform','Publisher','Genre', 'Rank'])#input

您的预测有另一个错误。如果您想预测哪个 Rank 将是一个输入,您必须提供一个或与 X 格式相同的样本。例如,如果您想要求对所有 X 进行预测:

predictions = model.predict(X)

您将获得每 X 行的预测。如果您想要求对某一行进行具体预测,则必须对其进行定义。

我建议您使用 sklearn.model_selection.train_test_split。 Here 更多信息。

检查导入 pandas(您导入为 pdd):

import pandas as pd 

解释你问的错误

正如您在错误中看到的,第一个错误发生在第 10 行:

---> 10 model.fit(X, y)

有了这个信息,并结合最后一行的错误:

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

我们知道问题出在函数拟合上。该函数正在抱怨,因为在您的 dataFrame 中有空值 (NaN)、无穷大值或太大的值。


检查

要解决这个问题,首先我建议您检查是否有 NaN 值:

df.isnull().any().any() 

如果您的数据帧中有 NaN 值,此命令返回 True,否则返回 False。点击here了解更多信息。

可能你会得到一个 True 值,因为你有 NaN 值。


解决

很明显,我们必须删除或更改 NaN 值,因为函数 fit 不适用于这些值。

删除:如果您只有几个 NaN 值,我强烈建议您删除所有这些行:

df.dropna()

更改:另一种解决方案是将 de NaN 值更改为 0。这也将解决此问题,但您必须注意您正在使用此步骤修改数据帧。

df.fillna()

还有其他选项可以替代 NaN 值,例如,对于列的平均值,重复次数最多的,...


最终的代码应该是这样的:

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
df = pd.read_csv('vgsales.csv')
X = df.drop(columns=['Name','Platform','Publisher','Genre', 'Rank'])#input
y = df['Rank']#output
model = DecisionTreeClassifier()
model.fit(X, y)
predictions = model.predict(X)
predictions

我希望这可以帮助您解决问题! :)

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2015-09-11
    • 2022-11-17
    相关资源
    最近更新 更多