KNN,python:TypeError:' float'对象没有属性' __ getitem __'

时间:2016-08-26 10:34:31

标签: python-2.7 typeerror uncaught-typeerror

我的代码在朋友计算机上工作正常我不明白为什么它在我的计算机上的anaconda环境中工作,请帮忙。这是python安装或代码的问题吗?

iris_train和iris_test数据文件都显示为:

  

块引用

Sepal Length    Sepal Width  Petal Length   Petal Width   classType    classNames

5.1             3.5          1.4            0.2          Iris-setosa        Iris-setosa
4.9             3            1.4            0.2          Iris-setosa        Iris-virginica
4.7             3.2          1.3            0.2          Iris-setosa        Iris-versicolor
  

块引用

运行代码时收到以下错误:

File "/Applications/anaconda2/lib/python2.7/site-   packages/spyderlib/widgets/externalshell/sitecustomize.py", line 714, in runfile
execfile(filename, namespace)

File "/Applications/anaconda2/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 81, in execfile
builtins.execfile(filename, *where)

File   "/Users/nadiastraton/Documents/workspacePython/02450Toolbox_Python/Thesis/Scripts/   Script_Results/KNN/KNN1.py", line 30, in <module>
classNames = list({name[0] for name in data_train['classNames']})

File "/Users/nadiastraton/Documents/workspacePython/02450Toolbox_Python/Thesis/Scripts/  Script_Results/KNN/KNN1.py", line 30, in <setcomp>
classNames = list({name[0] for name in data_train['classNames']})

TypeError: 'float' object has no attribute '__getitem__'

当我尝试从终端访问运行文件(&#39; KNN1&#39;)时收到以下错误:

File "/Applications/anaconda2/lib/python2.7/site-packages/pylab.py", line 1,    in <module>
from matplotlib.pylab import *
File "/Applications/anaconda2/lib/python2.7/site-    packages/matplotlib/__init__.py", line 1131, in <module>
rcParams = rc_params()
File "/Applications/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py", line 975, in rc_params
return rc_params_from_file(fname, fail_on_error)
File "/Applications/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py", line 1100, in rc_params_from_file
config_from_file = _rc_params_in_file(fname, fail_on_error)
File "/Applications/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py", line 1018, in _rc_params_in_file
with _open_file_or_url(fname) as fd:
File "/Applications/anaconda2/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/Applications/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py", line 1000, in _open_file_or_url
encoding = locale.getdefaultlocale()[1]
File "/Applications/anaconda2/lib/python2.7/locale.py", line 543, in getdefaultlocale
return _parse_localename(localename)
File "/Applications/anaconda2/lib/python2.7/locale.py", line 475, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

我的代码是:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix
from pylab import figure, ylabel, xlabel,hold, xticks,yticks, show, title,    plot, imshow, colorbar
import pandas as pd


data_train  =pd.read_excel('iris_train.xlsx')
data_test =pd.read_excel('iris_test.xlsx')

X_train =data_train.as_matrix(columns=['Sepal Length', 'Sepal Width'])
X_test =data_test.as_matrix(columns=['Sepal Length', 'Sepal Width'])

y_train =data_train.as_matrix(columns=['classType'])
y_test =data_test.as_matrix(columns=['classType'])

# attributeNames = [name[0] for name in data['attributeNames'].squeeze()]
classNames = list({name[0] for name in data_train['classNames']})
N, M = X_train.shape
C = len(classNames)

# K-nearest neighbors
K=2

# Distance metric (corresponds to 2nd norm, euclidean distance).
# You can set dist=1 to obtain manhattan distance (cityblock distance).
dist=2

# Fit classifier and classify the test points
knn = KNeighborsClassifier(n_neighbors=K, p=dist);
knn.fit(X_train, y_train);
y_est = knn.predict(X_test);

# Plot the training data points (color-coded) and test data points.
figure(1);
hold(True);
styles = ['.b', '.r', '.g']
# import ipdb; ipdb.set_trace()
for c in range(C):
class_mask = (y_train==c)
plot(X_train[class_mask], X_train[class_mask], styles[c])

# Plot the classfication results
styles = ['ob', 'or', 'og']
for c in range(C):
class_mask = (y_est==c)
plot(X_test[class_mask,0], X_test[class_mask,1], styles[c], markersize=10)
plot(X_test[class_mask,0], X_test[class_mask,1], 'kx', markersize=8)
title('Synthetic data classification - KNN');

# Compute and plot confusion matrix
cm = confusion_matrix(y_test.ravel(), y_est);
accuracy = 100*cm.diagonal().sum()/cm.sum(); error_rate = 100-accuracy;
figure(2);
imshow(cm, cmap='binary', interpolation='None');
colorbar()
xticks(range(C));
yticks(range(C));
xlabel('Predicted class'); ylabel('Actual class');
title('Confusion matrix (Accuracy: {0}%, Error Rate: {1}%)'.format(accuracy,   error_rate));

 show()

0 个答案:

没有答案