scikit-learn - 解释 SVC 和 GridSearch 结果
问题描述
我正在研究使用scikit-learn svm svc作为模型的纹理分类器。我对我得到的一些结果有点困惑,主要是为什么参数gamma和C的选择对我的结果有如此大的影响。所以这里是我的案例的简短描述:
我总共有 195 张图像,分为 8 类,如下所示;木材 - 56,大理石 - 23,水泥 - 16,混凝土 - 7,瓷砖 - 32,地毯 - 18,砖 - 25,织物 - 18。
我以 80-20 的比例将我的数据随机分为训练集和测试集。
我使用 SVC 作为模型:model = SVC(C=C, random_state=42, gamma=gamma)
我用训练数据拟合我的模型。接下来,我为我的测试数据预测类别,并使用准确度(正确预测的比率)作为分数。
对于C和gamma的不同选择,我的分数如下所示:
对于C=100和变化的gamma:
| gamma | 1e-3|1e-2|1e-1| 1e0| 1e1| 1e2| 1e3| 1e4|
| score | 0.28|0.28|0.29|0.36|0.54|0.76|1.00|1.00|
对于固定的gamma=10和变化的C
| C |1e-1| 1e0| 1e1| 1e2| 1e3| 1e4| 1e5| 1e6|
| score | 0.28|0.29|0.37|0.54|0.67|0.83|0.97|1.00|
正如所见,分数随着C和gamma的增加而增加。
首先,我认为大C和gamma的结果太“完美”了。它具有 100% 的准确度。据我了解 C 的影响,C越大,它越适合训练数据,但模型越不“平滑”。我想您可以将结果解释为训练和测试数据非常相似,因此较大的C值将导致较高的准确性。如果我们将gamma视为每个 train item 的反影响半径,也可以得出结论,train 和 test 数据可能非常相似。
另一方面,当我使用GridSearchCV
调整参数时,我得到了结果:
最好的The best parameters are {'C': 100000.0, 'gamma': 10.0} with a score of 0.46
我如何解释这个 0.46 的分数?对我来说,与我测试时得到的准确度结果相比,它似乎非常低。
解决方案
推荐阅读
- ios - 在 mapbox 地图上用一根手指缩放似乎也改变了中心位置?
- python - 如何传递生成器以创建 threading.Thread 并访问参数数组中生成器的元素
- load - 寄存器编号如何影响 ISA 中的加载和存储次数?
- python - 熊猫映射到下周的星期一
- autosys - Autosys 一个作业可以同时运行多个实例吗
- django - 在 django 中注册用户 cognito
- optimization - 如何在没有 UBO 的情况下进行批处理?
- python-3.x - Python 3 openCV png覆盖在相机的实时预览上
- css - NextJs SSR 无法识别移动设备的 CSS 媒体查询
- javascript - 带有引导程序的 Angularjs 下拉菜单