Numpy 数组转换错误
Numpy array conversion error
我有一个包含字符串和浮点数据的数据集。
numPy 尝试将所有内容转换为浮点数,给出错误 "cannot convert string to float"
import numpy as np
import scipy
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
pd.set_option('display.height', 750)
pd.set_option('display.width', 750)
colnames = ['AGE', 'WORKCLASS', 'FNLWGT','EDU','EDU-NUM','MARITAL-
STATUS','JOB','RELATIONSHIP','RACE', 'SEX', 'CAPITAL-GAIN', 'CAPITAL-
LOSS','HOURS-PER-WEEK', 'NATIVE-COUNTRY', 'INCOME']
url = 'https://archive.ics.uci.edu/ml/machine-learning-
databases/adult/adult.data'
adults = pd.read_csv(url, names=colnames, header=None)
adults['CAPITAL-GAINS'] = (adults['CAPITAL-GAIN'] - adults['CAPITAL-LOSS'])
adults = adults.drop(['RELATIONSHIP', 'FNLWGT', 'EDU-NUM', 'MARITAL-STATUS',
'CAPITAL-GAIN', 'CAPITAL-LOSS'], axis=1)
#rearrange the columns to make it easier to set X
adults = adults[['AGE', 'WORKCLASS','EDU','JOB','RACE', 'SEX','HOURS-PER-
WEEK', 'NATIVE-COUNTRY', 'CAPITAL-GAINS', 'INCOME']]
adults.replace({'?': 0}, inplace=True)
#assign the X and y arrays using numpy
X = np.array(adults.ix[:,0:9])
y = np.array(adults['INCOME'])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
knn = KNeighborsClassifier()
knn.fit(X_train ,y_train)
pred = knn.predict(X_test)
print (accuracy_score(y_test, pred))
回溯:
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 documentation 中确实没有明确提到这一点,但如果您对算法的作用有一个粗略的了解,那就是计算 距离 在数据点之间,以便它随后可以找到 k 个最近的数据点,因此得名。并且由于没有任何(简单和通用的)方法来计算分类特征之间的距离,因此该算法根本不适用于这种情况。
另请参见数据科学堆栈交换中的this answer。
如果可能,您应该更改分类器。 SVM和神经网络支持这种类型的数据,但KNN不支持这种类型。
我有一个包含字符串和浮点数据的数据集。 numPy 尝试将所有内容转换为浮点数,给出错误 "cannot convert string to float"
import numpy as np
import scipy
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
pd.set_option('display.height', 750)
pd.set_option('display.width', 750)
colnames = ['AGE', 'WORKCLASS', 'FNLWGT','EDU','EDU-NUM','MARITAL-
STATUS','JOB','RELATIONSHIP','RACE', 'SEX', 'CAPITAL-GAIN', 'CAPITAL-
LOSS','HOURS-PER-WEEK', 'NATIVE-COUNTRY', 'INCOME']
url = 'https://archive.ics.uci.edu/ml/machine-learning-
databases/adult/adult.data'
adults = pd.read_csv(url, names=colnames, header=None)
adults['CAPITAL-GAINS'] = (adults['CAPITAL-GAIN'] - adults['CAPITAL-LOSS'])
adults = adults.drop(['RELATIONSHIP', 'FNLWGT', 'EDU-NUM', 'MARITAL-STATUS',
'CAPITAL-GAIN', 'CAPITAL-LOSS'], axis=1)
#rearrange the columns to make it easier to set X
adults = adults[['AGE', 'WORKCLASS','EDU','JOB','RACE', 'SEX','HOURS-PER-
WEEK', 'NATIVE-COUNTRY', 'CAPITAL-GAINS', 'INCOME']]
adults.replace({'?': 0}, inplace=True)
#assign the X and y arrays using numpy
X = np.array(adults.ix[:,0:9])
y = np.array(adults['INCOME'])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
knn = KNeighborsClassifier()
knn.fit(X_train ,y_train)
pred = knn.predict(X_test)
print (accuracy_score(y_test, pred))
回溯:
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 documentation 中确实没有明确提到这一点,但如果您对算法的作用有一个粗略的了解,那就是计算 距离 在数据点之间,以便它随后可以找到 k 个最近的数据点,因此得名。并且由于没有任何(简单和通用的)方法来计算分类特征之间的距离,因此该算法根本不适用于这种情况。
另请参见数据科学堆栈交换中的this answer。
如果可能,您应该更改分类器。 SVM和神经网络支持这种类型的数据,但KNN不支持这种类型。