簡體   English   中英

我是 Jupyter 的新手,不知道我在做什么有什么問題

[英]I'm brand new to Jupyter and have no idea what is wrong with what I am doing

我嘗試使用 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 說我需要更多文本

代碼中的錯誤

當您為 train 定義 X 和 Y 時,矩陣 X 將包含 de 列Rank 你也應該放下它 否則,您的決策樹將是“愚蠢的”,因為您將 output 作為輸入。 這是一個巨大的錯誤。 解決:

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

您的預測有另一個錯誤。 如果您想預測哪個 Rank 將是一個輸入,您必須提供一個或與 X 格式相同的樣本。例如,如果您想要求對所有 X 進行預測:

predictions = model.predict(X)

您將獲得每 X 行的預測。 如果您想要求對某一行進行具體預測,則必須對其進行定義。

我建議你使用 sklearn.model_selection.train_test_split。 這里有更多信息。

檢查導入 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').

我們知道問題出在 function 配合上。 function 抱怨是因為在您的 dataFrame 中有空值 (NaN)、無窮大值或太大的值。


檢查

為了解決這個問題,首先我建議你檢查你是否有 NaN 值:

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

如果 dataFrame 中有 NaN 值,此命令返回 True,否則返回 False。 點擊這里了解更多信息。

可能你會得到一個 True 值,因為你有 NaN 值。


求解

很明顯,我們必須刪除或更改 NaN 值,因為 function擬合不適用於此值。

刪除:如果您只有幾個 NaN 值,我強烈建議您刪除所有這些行:

df.dropna()

更改:另一種解決方案是將 de NaN 值更改為 0。這也將解決此問題,但您必須注意,您正在使用此步驟修改 dataFrame。

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

我希望這可以幫助您解決問題::)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM