python - 如何修复 fit() 方法中的“TypeError:'CategoricalDtype' 类型的对象没有 len()”问题?
问题描述
我正在 Kaggle 上试用 Titanic 数据集。我使用 dropna() 来保持简单,还删除了几列。但是,当我调用 fit() 方法时,我收到“TypeError:'CategoricalDtype' 类型的对象没有 len()”消息。
我尝试使用不同的分类器,但我得到了同样的错误。我想我的数据准备有问题。
df = pd.read_csv('train.csv')
df.drop('PassengerId', axis=1, inplace=True)
df.drop('Ticket', axis=1, inplace=True)
df.drop('Cabin', axis=1, inplace=True)
df.drop('Embarked', axis=1, inplace=True)
df=df.dropna()
mapping = {'male': 0, 'female': 1}
df = df.replace({'Sex': mapping})
paramlist=['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']
X, y = df[paramlist], df.Survived.astype('category')
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
classifier = KNeighborsClassifier(n_neighbors=3)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
confusion_table = confusion_matrix(y_test, y_pred)
print("KNN regression using: "+ str(paramlist))
print(confusion_table)
print(classification_report(y_test, y_pred))
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print("=======================================")
```python
Error trace -
File "<ipython-input-2-e6618b2ba888>", line 1, in <module>
runfile('C:/Users/vvnat/Documents/Vaibhav/Dropbox/Kaggle/Titanic/Titanic.py', wdir='C:/Users/vvnat/Documents/Vaibhav/Dropbox/Kaggle/Titanic')
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 704, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/vvnat/Documents/Vaibhav/Dropbox/Kaggle/Titanic/Titanic.py", line 222, in <module>
classifier.fit(X_train, y_train)
File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\neighbors\base.py", line 891, in fit
X, y = check_X_y(X, y, "csr", multi_output=True)
File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 759, in check_X_y
dtype=None)
File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 480, in check_array
if hasattr(array, "dtypes") and len(array.dtypes):
TypeError: object of type 'CategoricalDtype' has no len()
解决方案
尝试在 train_test_split() 之前制作 X 和 y np.arrays,id est X = np.array(X) 和 y = np.array(y)
推荐阅读
- javascript - 无法使用 node-cron 停止 cron 作业
- css - 有什么方法可以改变表格内条的颜色?
- c - Unix 和 Windows 中大型二进制文件的低级 I/O
- go - 如何制作可以做方法的接口的映射?
- sql - 删除 SQL 中的右括号
- firebase - Twitter OGP 在 Nuxt.js 和 Firebase 中无法正常工作
- video-encoding - 视频尺寸、比特率、亮度和屏幕尺寸之间的关系
- r - 将年份数据框转换为R中的类别计数数据框
- sqlite - 在运行时对 SQLite 内存中数据库进行故障排除
- typescript - 如何在打字稿中扩展字符串?