SGD主要应用在大规模稀疏数据问题上,经常用在文本分类及自然语言处理。假如数据是稀疏的,该模块的分类器可轻松解决如下问题:超过10^5 的训练样本、超过 10^5 的features。利用梯度来求解参数。
http://scikit-learn.org/stable/supervised_learning.html#supervised-learning
再看sklearn的官网的时候看到这么一部分
随机梯度下降分类器和回归器,还在奇怪,随机梯度下降难道不是一种求解参数的方法,难道可以用来做分类和回归?问了老公,他也不清楚,然后在网上搜搜资料,自己看看源码里怎么说的。
原来,随机梯度下降分类器并不是一个独立的算法,而是一系列利用随机梯度下降求解参数的算法的集合。
SGDClassifier(分类):
入参:
loss:损失函数,str,default: 'hinge',默认 'hinge',表示线性SVM(linearSVM)。The possible options are 'hinge', 'log', 'modified_huber',
'squared_hinge', 'perceptron', or a regression loss: 'squared_loss', 'huber', 'epsilon_insensitive', or 'squared_epsilon_insensitive'。
'log',表示逻辑回归(logistic regression)
'modified_huber'表示另一种平滑的损失函数,它带来了对异常点和概率估计的容忍。
'squared_hinge'和hinge类似,但是它的惩罚项是平方。
'perceptron' 是感知算法使用的线性损失函数。
还有一些其他的损失函数,被设计用作回归,但是也可以用作分类。详情参见SGDRegressor的相关描述。
penalty:惩罚项(也就是正则化项)。str。可选项为'none', 'l2', 'l1', or 'elasticnet'。默认'l2',它是线性SVM模型的标准化正则项。“l1”和“elasticnet”可能会给模型(特征选择)带来稀疏性,而“l2”是无法实现的。
alpha : float,乘以正则化项的常数,默认0.0001,当设置为'optimal'时,也可以用来计算学习率。
l1_ratio : float,弹性网络的混合参数,0 <= l1_ratio <= 1。当l1_ratio=0时,相当于L2惩罚项。l1_ratio=1时,为L1惩罚项。默认0.15.
fit_intercept : bool,是否对截距进行估计。如果是False, 则认为数据已经处于中心了,默认为True.
max_iter : int, optional,可选。训练数据的最大传递次数(也称为epochs)。它只会影响fit
方法的行为,而不影响 partial_fit
。默认为5(0.19版本)。在0.21版本中,默认为1000,或者tol不是None.
tol : float or None, optional,可选。停止准则。如果非None,当(loss > previous_loss - tol)时,迭代就会停止。默认为None(0.19版本)。在0.21版本中,默认为1e-3。
shuffle : bool, optional,可选。训练数据是否在每个epoch之后被重新洗牌(shuffle)默认为True。
verbose : integer, optional,可选。冗余的水平。
epsilon : float,epsilon-敏感损失函数中的Epsilon,仅当 loss
为'huber', 'epsilon_insensitive','squared_epsilon_insensitive'时。对于'huber'来说,确定阈值对于确定预测的准确性已经没有那么重要了。对于'epsilon_insensitive'来说,如果它们小于这个阈值,那么当前预测和正确标签之间的任何差异都会被忽略。
n_jobs : integer, optional,可选。计算机用于OVA (One Versus All, for multi-class problems) 的计算线程数。. -1 表示 'all CPUs'. 默认1.
random_state:和其他算法一样,随机种子。
learning_rate : string, optional,可选。学习率。
- 'constant': eta = eta0
- 'optimal': eta = 1.0 / (alpha * (t + t0)) [default]
- 'invscaling': eta = eta0 / pow(t, power_t)
eta0 : double,当learning_rate为'constant'或者'invscaling'时的初始学习率。默认值为0.0。如果learning_rate='optimal'则这个参数没有用。
power_t : double。逆缩放学习率的指数[默认值0.5 ]
class_weight:dict(字典), {class_label: weight} or "balanced" or None, optional,可选参数。为class_weight拟合参数而预设。权重和类别有关系。如果不给定的话,所有的类别的权重都被设定为1。在"balanced" 模式下,将利用y的值,自动调整权重,和类别的频率成反比。
n_samples / (n_classes * np.bincount(y))
warm_start : bool, optional,布尔型,可选,热启动。当设置为true时,将重用之前调用的结果来拟合作为初始化的值。否则将擦除之前调用的结果。
average : bool or int, optional布尔型或int型,可选。当设置为true时,计算SGD权重的均值,并将结果存储在coef_
属性中。如果设置为比1大的int型,当样本的总数大于average设定的这个数是,求平均的过程将会开始。比如 average=10
将会在10个样本后开始平均。
可调用的属性:
coef_ : array, shape (1, n_features) if n_classes == 2 else (n_classes,
n_features)各个feature被分配给的权重。
intercept_ : array, shape (1,) if n_classes == 2 else (n_classes,)截距,决策函数中的常数。
n_iter_ : int,达到停止标准的实际迭代次数。对于多分类拟合来说,它是每一个二元拟合的最大值。
loss_function_ : 具体的损失函数 LossFunction