对于有机器学习和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_digitsdigits = load_digits()from sklearn import svmclf = 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]
这个例子对示例数据“digits”的最后一个项目进行了分类/预测。
我认为SVM是适合我的方法。但我该如何在sklearn中加载我的数据,以及如何使用它来分类新图像?我找到了很多使用单词的例子,但没有一个是处理简单数字的。
回答:
从文档中:
数据集生成函数和svmlight加载器共享一个简单的接口,返回一个元组(X, y),其中X是一个n_samples x n_features的numpy数组,y是一个长度为n_samples的包含目标的数组。
所以你需要构建两个numpy数组:第一个像这样:
data = np.array([x[0] for x in data])
第二个像这样:
target = np.array([x[1] for x in data])