调用sklearn模型遇到Unknown label type: continuous 的解决办法

调用sklearn模型遇到Unknown label type: continuous 的解决办法

分类问题 sklearn.svm.SVC()

分类问题的标签应该设置为int类型,直接在y输入变量的后面加
上转换数据类型为int或者string即可:
    y_train.astype('int')

回归问题 sklearn.svm.SVR()

回归问题应该使用的是SVR,若使用sklearn.svm.SVC()则会
出现上面的问题,因为SVC()处理的是分类问题,标签的类型应
该是int或string类型。

SVC()与SVR()的区别

  • support vector classify(SVC)支持分类机做二分类的,找出分类面,解决分类问题
  • support vector regression(SCR)支持回归机做曲线拟合、函数回归 ,做预测,温度,天气,股票
  • 直观上来讲 SVM 分类(SVC Support Vector Classification)与 SVR(Support Vector Regression)图形上的区别如下:
    调用sklearn模型遇到Unknown label type: continuous 的解决办法_第1张图片
  • 对于样本 (x,y) ,传统的回归模型通常直接输出 f(x) 与真实输出 y 之间的差别来计算损失,当且仅当 f(x) 与 y 完全相同时,损失才是零。与此不同 SVR 假设我们能容忍 f(x) 与 y 之间最多有 ε 的偏差,即仅当 f(x) 与 y 之间的差别绝对值大于 ε 时才计算损失。这相当于以 f(x) 为中心 构建一个宽度为 2ε 的间隔带,若样本落入此间隔带,则认为是预测正确的,如下图:调用sklearn模型遇到Unknown label type: continuous 的解决办法_第2张图片

基于 Sklearn 的实践建议

【参考】sklearn - Tips on Practical Use

  • 核缓存的大小:对于 SCV、SVR、NuSVC 和 NuSVR,核函数缓存的大小对于大型问题的运行时间有着非常大的影响。如果有足够多的内存,建议把cache_size的大小设置的尽可能的大。
  • 设置 C:1 是一个合理的默认选择,如果有较多噪点数据,你应该较少 C 的大小。
  • SVM 算法不是尺度不变,因此强烈建议缩放你的数据。如将输入向量 X 的每个属性缩放到[0,1] 或者 [-1,1],或者标准化为均值为 0 方差为 1 。另外,在测试向量时也应该使用相同的缩放,已获得有意义的结果。
  • 对于SVC,如果分类的数据不平衡(如有很多的正例很少的负例),可以设置class_weight=‘balanced’,或者尝试不同的惩罚参数 C
  • 底层实现的随机性:SVC和NuSVC的底层实现使用了随机数生成器,在概率估计时混洗数据(当 probability 设置为 True),随机性可以通过 random_state 参数控制。如果 probability 设置为False ,这些估计不是随机的,random_state 对结果不在有影响。

Reference

https://www.cnblogs.com/jiading/p/12105232.html
https://www.cnblogs.com/ylHe/p/7676173.html

你可能感兴趣的:(python问题)