gpt4 book ai didi

machine-learning - 任何机器学习算法都可以找到这个模式 : x1 < x2 without generating a new feature (e. g. x1-x2) 首先?

转载 作者:行者123 更新时间:2023-11-30 09:17:30 24 4
gpt4 key购买 nike

如果我有 2 个特征 x1 和 x2,我知道模式是:

if x1 < x2 then 
class1
else
class2

任何机器学习算法都能找到这样的模式吗?那会是什么算法?

我知道我可以创建第三个特征 x3 = x1-x2。那么特征x3就可以很容易地被一些机器学习算法使用。例如,决策树可以使用 x3 和 3 个节点(1 个决策和 2 个叶节点)100% 解决问题。

但是,是否可以在不创建新功能的情况下解决这个问题?如果机器学习算法只能找到这样的模式,这似乎是一个可以 100% 轻松解决的问题。

我尝试了使用不同内核(包括 svg 内核)的 MLP 和 SVM,但结果并不好。作为我尝试的示例,以下是 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 < x2。然而,首先了解如何解决这个简单的模式会有很大帮助。

最佳答案

要理解这一点,您必须了解 sklearn 提供的所有参数的设置,尤其是 C。它还有助于理解 C 的值如何影响分类器的训练过程。

如果你看看 User Guide for SVC 中的方程,方程有两个主要部分 - 第一部分尝试找到解决问题的一小组权重,第二部分尝试最小化分类错误。

C 是与错误分类相关的惩罚乘数。如果减少 C,那么您就会减少惩罚(训练准确度较低,但测试的泛化能力会更好),反之亦然。

尝试将C设置为1e+6。您会发现您几乎总是获得 100% 的准确率。分类器已学习模式 x1 < x2。但当您查看另一个名为 tol 的参数时,它表明 99.2% 的准确度就足够了。这控制了多少误差对您来说可以忽略不计,默认情况下它设置为1e-3。如果降低容差,您也可以获得类似的结果。

一般来说,我建议您使用 GridSearchCV ( link ) 来查找 C 等超参数的最佳值,因为这会在内部分割数据集进入训练和验证。这有助于确保您不仅调整超参数以获得良好的训练准确性,而且还确保分类器在实践中表现良好。

关于machine-learning - 任何机器学习算法都可以找到这个模式 : x1 < x2 without generating a new feature (e. g. x1-x2) 首先?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51449610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com