在IRIS DataSet上运行SVM并获取ValueError:未知标签类型:'unknown'

时间:2016-12-13 18:47:22

标签: python pandas scikit-learn dataset

谁能以简单的方式向我解释这一点? 为方便起见,我提供了完整的代码。

我有这个代码加载IRIS数据集并运行SVM:

from sklearn import svm
import pandas as pd


def prepare_iris_DS():
    print("Loading iris DS...")
    url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
    iris = pd.read_csv(url, names=["sepal length", "sepal width", "petal length", "petal width", "Species"])
    df = pd.DataFrame(iris, columns=["sepal length", "sepal width", "petal length", "petal width", "Species"])

    df.head()
    iris.head()

    print("Iris DS is Loaded")

    columns, labels = ["sepal length", "sepal width"], ["Iris-setosa", "Iris-virginica"]

    total = df.shape[0]
    df = df[df.Species.isin(labels)]
    X = df[columns]

    print("selected {0} entries out of {1} from the dataset based on labels {2}".format(len(X), total, str(labels)))

    Y = df[["Species"]]
    Y.loc[Y.Species != labels[0], 'Species'] = 0.0
    Y.loc[Y.Species == labels[0], 'Species'] = 1.0

    X = X.as_matrix()
    Y = Y.as_matrix()

    return X, Y


X, Y = prepare_iris_DS()

rbf_svc = svm.SVC(kernel='rbf', gamma=0.1, C=0.1)
rbf_svc.fit(X, Y)

我在最后一行上一直收到错误:rbf_svc.fit(X,Y)

File "C:\Anaconda2\lib\site-packages\sklearn\utils\multiclass.py", line 172, in check_classification_targets

raise ValueError("Unknown label type: %r" % y_type)

ValueError: Unknown label type: 'unknown'

但是...... 当我把这个命令简单地工作时 我不明白为什么?我很欣赏明确/简单的答案

Y = Y.as_matrix().astype(float)

1 个答案:

答案 0 :(得分:2)

何时:Y = Y.as_matrix(),观察目标数组的数据类型:

>>> Y.dtype
object

fit的{​​{1}}方法需要一个数值可迭代的数值,因为它是训练向量, X 。但是目前,你已经向它传递了一组数字字符串值,这是不正确的。

这是因为 Y 直接分配给SVC dtypes。因此,即使你已经执行了布尔索引并通过在df[['Species]]操作期间用布尔值(0/1)替换它们来摆脱字符串值, Y <的dtype / em>未受影响且仍为loc类型。

因此,需要将它们转换回object dtype,然后int/float函数可以理解它。

fit

现在,当你测试时:

Y = Y.as_matrix().astype(float).ravel()  # ravel to flatten the 2D array to 1D

此外,您还可以包含以下更改:

>>> Y.dtype
float64

通过创建数据框的深层副本而不是直接分配数据框来避免X = df[columns].copy() Y = df[["Species"]].copy() 警告。