在 IRIS 数据集上运行 SVM 并获取值错误:未知标签类型:'unknown'



谁可以用简单的方式向我解释这一点?我为您提供便利的完整代码。

我有此代码加载虹膜数据集并运行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:Anaconda2libsite-packagessklearnutilsmulticlass.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)

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

>>> Y.dtype
object

SVCfit方法期望数值值的阵列,因为它的训练向量, x 。但是当前,您已将数字字符串值数组传递给了不正确的。

这是由于直接分配给 df[['Species]]dtypes的事实,这是由于以下事实。因此,即使您已经执行了布尔索引并通过用布尔值(0/1)替换字符串值,但在loc操作过程中, y is的dtype也是如此不受影响的object类型的残留。

因此,需要将它们打回int/float dtype,然后可以通过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()

通过创建数据框的深层副本,而不是直接分配SettingWithCopyWarning警告。

相关内容

  • 没有找到相关文章

最新更新