SVM 解决类别不平衡问题(scikit_learn)
2018-02-18 10:10
531 查看
在支持向量机中,CC 是负责惩罚错误分类数据的超参数。
解决数据类别不平衡的一个方法就是使用基于类别增加权重的CC值
Cj=C∗wjCj=C∗wj
其中,CC是误分类的惩罚项,wjwj是与类别 jj 的出现频率成反比的权重参数,CjCj 就是类别 jj 对应的 加权CC值
主要思路就是增大误分类 少数类别 带来的影响,保证 少数类别 的分类正确性,避免被多数类别掩盖
在scikit-learn 中,使用 svc 方法时,可以通过设置参数
class_weight=’balanced’
实现上述加权功能
参数‘balanced’ 会自动按照以下公式计算权值:
wj=nknjwj=nknj
其中,wjwj 为类别 jj 对应权值,nn 为数据总数,kk为类别数量,即数据有kk 个种类,njnj是类别 jj 的数据个数
可以看到,有60个数据,10个为类别0,50个为类别1
翻译自Chris Albon 博客
原文地址
解决数据类别不平衡的一个方法就是使用基于类别增加权重的CC值
Cj=C∗wjCj=C∗wj
其中,CC是误分类的惩罚项,wjwj是与类别 jj 的出现频率成反比的权重参数,CjCj 就是类别 jj 对应的 加权CC值
主要思路就是增大误分类 少数类别 带来的影响,保证 少数类别 的分类正确性,避免被多数类别掩盖
在scikit-learn 中,使用 svc 方法时,可以通过设置参数
class_weight=’balanced’
实现上述加权功能
参数‘balanced’ 会自动按照以下公式计算权值:
wj=nknjwj=nknj
其中,wjwj 为类别 jj 对应权值,nn 为数据总数,kk为类别数量,即数据有kk 个种类,njnj是类别 jj 的数据个数
0.导入库
# Load libraries from sklearn.svm import SVC from sklearn import datasets from sklearn.preprocessing import StandardScaler import numpy as np
1、加载Iris Flower 数据集
#只加载两个类别的数据,两类,各50个 iris = datasets.load_iris() X = iris.data[:100,:] y = iris.target[:100]
2.不均衡化数据集
# 删掉前四十个数据,数据总数变为60个 X = X[40:,:] y = y[40:] # 类别为0的类别不变,类别不为0的全部变为1 y = np.where((y == 0), 0, 1)
y
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
可以看到,有60个数据,10个为类别0,50个为类别1
3.特征标准化
# Standarize features scaler = StandardScaler() X_std = scaler.fit_transform(X)
4.使用加权类别训练SVM分类器
# Create support vector classifier svc = SVC(kernel='linear', class_weight='balanced', C=1.0, random_state=0) # Train classifier model = svc.fit(X_std, y)
翻译自Chris Albon 博客
原文地址
相关文章推荐
- 【机器学习】使用Scikit-Learn库的核SVM解决非线性问题
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- python scikit-learn 环境搭建问题解决记录
- Kaggle入门——使用scikit-learn解决DigitRecognition问题
- 分类中常见的类别不平衡问题解决方法
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- 机器学习之pip安装scikit-learn问题解决
- Kaggle入门——使用scikit-learn解决DigitRecognition问题
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- Python解决安装模块scikit-learn和python-Levenshtein出现的问题
- Kaggle入门——使用scikit-learn解决DigitRecognition问题
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- Kaggle入门——使用scikit-learn解决DigitRecognition问题
- 对类别不平衡问题的解决方法
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
- 【机器学习】使用Scikit-Learn库的L2正则化解决过拟合问题
- 安装numpy+scipy+matlotlib+scikit-learn及问题解决