# 利用循环特征剔除算法,基于交叉验证,自动调整选取特征的最优数目
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV
from sklearn.datasets import make_classification
# build a classification task using 3 informative features
# 生成包含8个类别、25个特征、1000个样本的分类数据集
X, y = make_classification(n_samples=1000, n_features=25, n_informative=3,
n_redundant=2, n_repeated=0, n_classes=8,
n_clusters_per_class=1, random_state=0)
# create the RFE object and compute a cross-validated score
# 实例化支持向量分类模型,核函数选择线性核
# 基于svm包实现,训练时间复杂度至少是样本数的二次方,而且对超过百万样本的数据集不实用
# 大型数据集推荐使用sklearn.linear_model.LinearSVC或者sklearn.linear_model.SGDClassifier替换,最好是经过sklearn.kernel_approximation.Nystroem转换数据集
# 对于算法细节和gamma、coef0、degree等参数如何互相影响,参考user guide里的kernel functions章节
svc = SVC(kernel=&