linearRegression.score 和 svm.svc(kernel = linear) 产生的不同结果
Posted
技术标签:
【中文标题】linearRegression.score 和 svm.svc(kernel = linear) 产生的不同结果【英文标题】:Different results produced by linearRegression.score and svm.svc(kernel = linear) 【发布时间】:2022-01-07 07:27:51 【问题描述】:我对机器学习很陌生。
我有一个数据集,我想对其应用测试训练拆分和交叉验证以进行线性回归。
我尝试使用 train_test_split(X, y, test_size=0.3) 拆分数据集,我都执行了
reg = LinearRegression().fit(X_train,y_train)
reg.score(X_test,y_test)
clf = svm.SVC(kernel = 'linear').fit(X_train,y_train)
clf.score(X_test,y_test)
reg.score 的输出为 0.98,但 clf.score 的输出非常低,接近 0。为什么这些结果不同?
我也尝试过
clf = svm.SVC(kernel='linear', C=1, random_state=42)
scores = cross_val_score(clf, X, y, cv=2)
它也给出了非常小的数字,并看到了这个警告
UserWarning: The least populated class in y has only 1 members, which is less than n_splits=2.
% (min_groups, self.n_splits)), UserWarning)
我尝试了不同的 cv,但 cv>5 给出错误“n_splits=5 不能大于每个类中的成员数。”请注意,我使用的数据集不是二进制或简单的多类。它更像是月度销售数据,而不是分类数据。我认为这可能就是导致警告的原因。这种情况我该怎么办?
【问题讨论】:
【参考方案1】:您在这里混淆了回归(对于连续值目标)和分类。linear regression model 需要一个连续的值目标,它的分数是决定系数。support vector classifier是一种分类方法,它的分数是分类准确率。
您声明您的目标不是绝对的,所以我想您希望使用 support vector regression 而不是 SVC。
既然你说是机器学习新手,不妨看看this tutorial。
【讨论】:
谢谢!这是一个很好的建议,但是在我尝试之后,我仍然得到了不同的分数——这次 svm.svr.score 就像 -500ish,这是不正常的还是我只需要看看别的东西? 负 R2 分数是可能的(如 the docs 中所述),但是 -500 意味着您的模型预测很差。如果有任何严重错误,最好重新检查您的代码。或者也许有关于收敛的警告?还可以查看训练集的分数。如果它同样糟糕,那么在训练过程中出了点问题。以上是关于linearRegression.score 和 svm.svc(kernel = linear) 产生的不同结果的主要内容,如果未能解决你的问题,请参考以下文章
第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等
shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]
Java基础8---面向对象代码块和继承和this和super和重写和重载和final
Java基础8---面向对象代码块和继承和this和super和重写和重载和final
JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()