对于有机器学习+sklearn经验的人来说,这可能很简单,但我是一个彻头彻尾的菜鸟,我被困住了。我正在尝试根据三个数字特征将图像分类为"剪贴画"和"照片"。
我的数据集(可能)如下所示:
data = (
("photo", (213, 32, 2)),
("clipart", (453, 465, 212)),
("clipart", (23, 2, 6552)),
("photo", (8797, 0, 872)),
("photo", (67, 4325, 43)),
("clipart", (11, 21, 77)),
...
)
每个项目都包含以下数据:(图像类型、(功能 1、功能2、功能3))
从 sklearn 文档中,我得到了这个例子:
from sklearn.datasets import load_digits
digits = load_digits()
from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100.)
clf.fit(digits.data[:-1], digits.target[:-1])
svm.SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
print clf.predict(digits.data[-1])
>>>> [8]
对示例数据"数字"的最后一项进行分类/预测。
我认为 SVM 是实现我目的的正确方法。但是如何在 sklearn 中加载我的数据以及如何使用它来对新图像进行分类?我发现很多使用单词的例子,但没有一个用于处理简单数字的例子。
从文档中:
数据集生成函数和 svmlight 加载器共享一个 简单接口,返回一个元组 (X, y),由 n_samples x n_features numpy 数组 X 和长度n_samples数组 包含目标 y。
所以你必须构造两个 numpy 数组:第一个数组如下:
data = np.array([x[0] for x in data])
第二个
target = np.array([x[1] for x in data])