我有一个包含字符串和浮点数据的数据集。NumPy试图将所有数据转换为浮点数,导致错误“无法将字符串转换为浮点数”。
错误追踪:
Traceback (most recent call last): File "C:/Users/nolan/OneDrive/Desktop/digits.py", line 37, in <module> knn.fit(X_train ,y_train) File "C:\Program Files\Python\lib\site-packages\sklearn\neighbors\base.py", line 765, in fit X, y = check_X_y(X, y, "csr", multi_output=True) File "C:\Program Files\Python\lib\site-packages\sklearn\utils\validation.py", line 573, in check_X_y ensure_min_features, warn_on_dtype, estimator) File "C:\Program Files\Python\lib\site-packages\sklearn\utils\validation.py", line 433, in check_array array = np.array(array, dtype=dtype, order=order, copy=copy)ValueError: could not convert string to float: ' Peru'
所有数据看起来像这样:
39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, Not-in-family, White, Male, 2174, 0
有没有办法设置NumPy来保存这些数据并避免转换错误?
回答:
这里并没有NumPy转换错误;问题仅仅是k-nn算法无法处理分类特征。虽然这在scikit-learn的文档中没有明确提到,但如果你对算法的工作原理有一点基本的了解,就会明白这一点。该算法的工作原理是计算数据点之间的距离,以便随后找到k个最近的点,因此得名。由于没有简单且通用的方法来计算分类特征之间的距离,因此在这种情况下该算法根本不适用。