我有一个包含字符串和浮点数据的数据集。 numPy尝试将所有内容转换为float,并给出错误“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))
回溯:
^{pr2}$所有数据如下:
^{3}$有没有办法设置numPy来保存转换错误的数据?在
如果可能,您应该更改分类器。支持向量机和神经网络支持这种类型的数据,但KNN不支持这一点。在
这里没有任何numpy转换错误;问题只是k-nn算法无法处理类别特征。诚然,scikit learndocumentation中并没有明确提到这一点,但如果你对算法的作用有一个粗略的了解,也就是计算数据点之间的距离,这样它就可以找到最近的k个,因此得名。由于没有任何(简单和通用)方法来计算类别特征之间的距离,所以该算法在这种情况下根本不适用。在
另请参见数据科学堆栈交换中的this answer。在
相关问题 更多 >
编程相关推荐