SGD主要應(yīng)用在大規(guī)模稀疏數(shù)據(jù)問題上,經(jīng)常用在文本分類及自然語言處理朗兵。假如數(shù)據(jù)是稀疏的膳音,該模塊的分類器可輕松解決如下問題:超過10^5 的訓(xùn)練樣本剂习、超過 10^5 的features胧奔。利用梯度來求解參數(shù)逊移。
http://scikit-learn.org/stable/supervised_learning.html#supervised-learning
再看sklearn的官網(wǎng)的時候看到這么一部分
隨機梯度下降分類器和回歸器预吆,還在奇怪龙填,隨機梯度下降難道不是一種求解參數(shù)的方法,難道可以用來做分類和回歸?問了老公岩遗,他也不清楚扇商,然后在網(wǎng)上搜搜資料,自己看看源碼里怎么說的宿礁。
原來案铺,隨機梯度下降分類器并不是一個獨立的算法,而是一系列利用隨機梯度下降求解參數(shù)的算法的集合梆靖。
SGDClassifier(分類):
入?yún)ⅲ?/p>
loss:損失函數(shù)控汉,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'表示另一種平滑的損失函數(shù),它帶來了對異常點和概率估計的容忍捍靠。
'squared_hinge'和hinge類似沐旨,但是它的懲罰項是平方。
'perceptron' 是感知算法使用的線性損失函數(shù)榨婆。
還有一些其他的損失函數(shù)磁携,被設(shè)計用作回歸,但是也可以用作分類良风。詳情參見SGDRegressor的相關(guān)描述颜武。
penalty:懲罰項(也就是正則化項)。str拖吼×凵希可選項為'none', 'l2', 'l1', or 'elasticnet'。默認'l2'吊档,它是線性SVM模型的標準化正則項篙议。“l(fā)1”和“elasticnet”可能會給模型(特征選擇)帶來稀疏性怠硼,而“l(fā)2”是無法實現(xiàn)的鬼贱。
alpha : float,乘以正則化項的常數(shù)香璃,默認0.0001这难,當(dāng)設(shè)置為'optimal'時,也可以用來計算學(xué)習(xí)率葡秒。
l1_ratio : float姻乓,彈性網(wǎng)絡(luò)的混合參數(shù)嵌溢,0 <= l1_ratio <= 1。當(dāng)l1_ratio=0時蹋岩,相當(dāng)于L2懲罰項赖草。l1_ratio=1時秒梳,為L1懲罰項喧半。默認0.15.
fit_intercept : bool,是否對截距進行估計蠕蚜。如果是False, 則認為數(shù)據(jù)已經(jīng)處于中心了扣囊,默認為True.
max_iter : int, optional乎折,可選。訓(xùn)練數(shù)據(jù)的最大傳遞次數(shù)(也稱為epochs)侵歇。它只會影響fit
方法的行為笆檀,而不影響 partial_fit
。默認為5(0.19版本)盒至。在0.21版本中酗洒,默認為1000,或者tol不是None.
tol : float or None, optional枷遂,可選樱衷。停止準則。如果非None酒唉,當(dāng)(loss > previous_loss - tol)時矩桂,迭代就會停止。默認為None(0.19版本)痪伦。在0.21版本中侄榴,默認為1e-3。
shuffle : bool, optional网沾,可選癞蚕。訓(xùn)練數(shù)據(jù)是否在每個epoch之后被重新洗牌(shuffle)默認為True。
verbose : integer, optional辉哥,可選桦山。冗余的水平。
epsilon : float醋旦,epsilon-敏感損失函數(shù)中的Epsilon恒水,僅當(dāng) loss
為'huber', 'epsilon_insensitive','squared_epsilon_insensitive'時。對于'huber'來說饲齐,確定閾值對于確定預(yù)測的準確性已經(jīng)沒有那么重要了钉凌。對于'epsilon_insensitive'來說,如果它們小于這個閾值捂人,那么當(dāng)前預(yù)測和正確標簽之間的任何差異都會被忽略御雕。
n_jobs : integer, optional矢沿,可選。計算機用于OVA (One Versus All, for multi-class problems) 的計算線程數(shù)饮笛。. -1 表示 'all CPUs'. 默認1.
random_state:和其他算法一樣咨察,隨機種子论熙。
learning_rate : string, optional福青,可選。學(xué)習(xí)率脓诡。
- 'constant': eta = eta0
- 'optimal': eta = 1.0 / (alpha * (t + t0)) [default]
- 'invscaling': eta = eta0 / pow(t, power_t)
eta0 : double无午,當(dāng)learning_rate為'constant'或者'invscaling'時的初始學(xué)習(xí)率。默認值為0.0祝谚。如果learning_rate='optimal'則這個參數(shù)沒有用宪迟。
power_t : double。逆縮放學(xué)習(xí)率的指數(shù)[默認值0.5 ]
class_weight:dict(字典), {class_label: weight} or "balanced" or None, optional交惯,可選參數(shù)次泽。為class_weight擬合參數(shù)而預(yù)設(shè)。權(quán)重和類別有關(guān)系席爽。如果不給定的話意荤,所有的類別的權(quán)重都被設(shè)定為1。在"balanced" 模式下只锻,將利用y的值玖像,自動調(diào)整權(quán)重,和類別的頻率成反比齐饮。
n_samples / (n_classes * np.bincount(y))
warm_start : bool, optional捐寥,布爾型,可選祖驱,熱啟動握恳。當(dāng)設(shè)置為true時,將重用之前調(diào)用的結(jié)果來擬合作為初始化的值捺僻。否則將擦除之前調(diào)用的結(jié)果睡互。
average : bool or int, optional布爾型或int型,可選陵像。當(dāng)設(shè)置為true時就珠,計算SGD權(quán)重的均值,并將結(jié)果存儲在coef_
屬性中醒颖。如果設(shè)置為比1大的int型妻怎,當(dāng)樣本的總數(shù)大于average設(shè)定的這個數(shù)是,求平均的過程將會開始泞歉。比如 average=10
將會在10個樣本后開始平均逼侦。
可調(diào)用的屬性:
coef_ : array, shape (1, n_features) if n_classes == 2 else (n_classes,
n_features)各個feature被分配給的權(quán)重匿辩。
intercept_ : array, shape (1,) if n_classes == 2 else (n_classes,)截距,決策函數(shù)中的常數(shù)榛丢。
n_iter_ : int铲球,達到停止標準的實際迭代次數(shù)。對于多分類擬合來說晰赞,它是每一個二元擬合的最大值稼病。
loss_function_ : 具體的損失函數(shù) LossFunction