machine-learning - 为什么它只适用于在 SVM 分类器中设置 kernel:'rbf'?
问题描述
from sklearn.model_selection import GridSearchCV
from sklearn import svm
params_svm = {
'kernel' : ['linear','rbf','poly'],
'C' : [0.1,0.5,1,10,100],
'gamma' : [0.001,0.01,0.1,1,10]
}
svm_clf = svm.SVC()
estimator_svm = GridSearchCV(svm_clf,param_grid=params_svm,cv=4,verbose=1,scoring='accuracy')
estimator_svm.fit(data,labels)
print(estimator_svm.best_params_)
estimator_svm.best_score_
/*
data.shape is (891,9)
labels.shape is (891) both are numeric 2-D and 1-D arrays.
*/
当我将 GridSearchCV 与 rbf 一起使用时,它会在 2.7 秒内提供最佳参数组合..!但是当我单独列出包含任何“poly”或“linear”或“rbf”的内核列表时,产生输出需要很长时间,即即使在 15-20 分钟后也不给出输出,这意味着我做错了什么。我是机器学习(监督)的新手。我无法在编码中找到任何错误......我不知道幕后出了什么问题!
谁能向我解释一下,我做错了什么
解决方案
不,根据您的代码,您没有做错任何事情。这里有很多因素在起作用
- SVC 是一个复杂的分类器,它需要计算数据集中每对点之间的距离。
复杂度也随着不同的内核而变化。我不确定,但我认为它
O((no_of_samples)^2 * n_features)
适用于 rbf 内核,而它O(n_samples*n_features)
适用于线性内核。因此,并不是仅仅因为rbf kernel
在 15 分钟内工作,那么线性内核也将在相似的时间内工作。此外,所花费的时间很大程度上取决于数据集和其中存在的数据模式。例如,一个 rbf 内核可能会快速收敛,
C = 0.5
但对于相同的 C 值,多项式内核可能需要更多的时间来收敛。此外,如果不使用缓存,运行时间会增加很多。在这个答案中,作者提到它可能会增加到 O(n_samples^3 *n_features)。
这是sklearn 关于 SVM 复杂性的官方文档。有关使用 SVM 的实用技巧,请参阅本节。
您可以设置
verbose
为 True 以查看分类器的进度及其训练方式。
参考
推荐阅读
- python - Keras ValueError:没有为任何变量提供渐变
- python - 你如何根据特定的键值对比较两个熊猫系列?
- reactjs - @storybook/addon-controls:如何不为某个道具自动生成控件
- python - 通过 pip 安装 PyGame 模块时出现问题
- google-chrome-extension - 如何将消息从后台脚本发送到内容脚本?
- video - UWP MediaPlayerElement - 海报一直放置直到播放
- python - matplotlib:更改 x 限制日期
- r - 使用图书馆车识别回归中的有影响的观察
- ios - UIKit-Swift 自定义 UIButton 不会触发点击动作
- python - python中beautifulsoup的逃逸问题