[英]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.