【发布时间】:2018-12-29 04:23:39
【问题描述】:
如果我有 2 个特征 x1 和 x2,我知道模式是:
if x1 < x2 then
class1
else
class2
任何机器学习算法都可以找到这样的模式吗?那会是什么算法?
我知道我可以创建第三个特征 x3 = x1-x2。那么特征 x3 可以很容易地被一些机器学习算法使用。例如,决策树可以使用 x3 和 3 个节点(1 个决策和 2 个叶节点)100% 地解决问题。
但是,是否可以在不创建新功能的情况下解决这个问题?如果机器学习算法只能找到这样的模式,这似乎是一个应该 100% 轻松解决的问题。
我尝试了不同内核的 MLP 和 SVM,包括 svg 内核,但结果不是很好。作为我尝试的示例,这里是 scikit-learn 代码,其中 SVM 只能获得 0.992 的分数:
import numpy as np
from sklearn.svm import SVC
# Generate 1000 samples with 2 features with random values
X_train = np.random.rand(1000,2)
# Label each sample. If feature "x1" is less than feature "x2" then label as 1, otherwise label is 0.
y_train = X_train[:,0] < X_train[:,1]
y_train = y_train.astype(int) # convert boolean to 0 and 1
svc = SVC(kernel = "rbf", C = 0.9) # tried all kernels and C values from 0.1 to 1.0
svc.fit(X_train, y_train)
print("SVC score: %f" % svc.score(X_train, y_train))
运行代码的输出:
SVC score: 0.992000
这是对我的问题的过度简化。真正的问题可能有数百个特征和不同的模式,而不仅仅是 x1
【问题讨论】:
标签: machine-learning scikit-learn feature-extraction pattern-recognition