小编Ric*_* F.的帖子

在Sklearn的SVC中,当标签尺寸较大时,为什么训练时间与最大迭代不是严格线性的?

我做了一个分析,试图看到SVC中训练时间和最大迭代之间的关系.我使用的数据是一些随机生成的数字,我将训练时间与SVC拟合的max_iter相对应.我检查了日志,每个二进制分类器都已达到max_iter(我输出所有控制台日志,显示每个二进制分类器的详细警告并计算它们).然而,我假设训练时间与迭代严格线性,但实际上,在训练数据有许多标签的情况下,例如40,那么该图不显示它是线性的. 在此输入图像描述

似乎最大迭代次数增加,每次迭代所花费的时间比以前少得多.如果我们将label_size更改为2(这意味着每个fit只包含1个二元分类器),则该行是直的.

在此输入图像描述

是什么导致这种情况发生?

这是我的源代码:

# -*- coding: utf-8 -*-
import numpy as np
from sklearn.svm import SVC
import time
import pandas as pd


def main(row_size, label_size):
    np.random.seed(2019)
    y = np.array([i for i in range(label_size) for j in range(row_size
                 / label_size)])
    if len(y) < row_size:
        y = np.append(y, [y[-1]] * (row_size - len(y)))
    X = np.random.rand(row_size, 300)
    print X.shape, y.shape
    return (X, y)


def train_svm(X, y, max_iter):
    best_params = {'C': 1}
    clf = SVC(
        C=best_params['C'],
        kernel=str('linear'),
        probability=False,
        class_weight='balanced',
        max_iter=max_iter,
        random_state=2018,
        verbose=True, …
Run Code Online (Sandbox Code Playgroud)

python machine-learning svc scikit-learn

8
推荐指数
1
解决办法
302
查看次数

Sklearn GridSearch的培训复杂性是什么?

gs_clf = GridSearchCV(SVC(probability=False, class_weight='balanced', max_iter=100, random_state=2018, tol=1e-10),
                          param_grid={'C': [2, 5, 10] , 'kernel': 'linear'},
                          n_jobs=1,
                          refit=False,
                          cv=2,
                          scoring='f1_weighted',
                          verbose=1)
gs_clf.fit(X, y)
Run Code Online (Sandbox Code Playgroud)

这就是我使用Gridsearch和SVC来匹配数据的方法.基本上,我根据随机训练数据调整数据点的行数和标签数,并记录时间消耗.从理论上讲,似乎SVC(不linearSVC)linear内核使用OVO多类实现,计算复杂度为O(#samples*#class*iter).

以下是我遇到的两个问题:

  1. 似乎Gridsearch正在为多类分类做一些内部优化.训练时间log(#label)(粗略地)呈线性上升.与单一SVC培训相反,时间呈线性上升趋势#label.Gridsearch究竟在做什么?

培训复杂性与标签数量(行是固定的)

  1. 当标签数量较少时,训练时间作为max_iter的函数线性增长,例如#label=2.但是当#label它很大时情况并非如此.什么时候#label=40,time(max_iter=200)没有那么不同time(max_iter=400).这不仅发生在gridsearch中,也发生在SVC上.我设置tol为非常小,希望适合总是达到最大迭代但似乎它不起作用.这背后的机制是什么?

我正在使用sklearn == 0.18.1.谢谢!

python svm svc scikit-learn grid-search

6
推荐指数
0
解决办法
494
查看次数

标签 统计

python ×2

scikit-learn ×2

svc ×2

grid-search ×1

machine-learning ×1

svm ×1