16

我有以下形式的classic linear迴歸問題:約束線性迴歸在Python

y = X b

其中y響應向量X矩陣輸入變量b是的矢量我正在尋找適合的參數。

Python提供了b = numpy.linalg.lstsq(X , y)來解決這種形式的問題。

但是,當我使用這個我傾向於得到非常大或非常小的值爲b的組件。

我想0和255

它看起來像scipy.optimize.fmin_slsqp()是一個選項之間進行同樣合適,但限制的b值,但我發現它的問題大小我極其緩慢m感興趣(X就像3375 by 1500,希望更大)。

  1. 是否有執行的約束至少 平方適用於任何其他的Python的選擇嗎?
  2. 還是有蟒蛇例程執行Lasso Regression或嶺迴歸或其他迴歸方法 懲罰較大的b係數值?

回答

8

看一看: http://scipy-central.org/item/17/3/pymls-solving-bounded-linear-least-squares-problems

而且Openopt具有綁定bvls,另一界線性LSQ求解。

編輯: 如果scipy.optimize.nnls夠了,也可以嘗試。

+0

不錯,表面上聽起來像我所需要的。能夠爲'X'輸入變量矩陣行提供權重對我來說可能實際上也是非常有用的(我確實對可能讓我充分利用的各種數據點的可靠性有一定的瞭解)。我一定會試試看,謝謝! – ulmangt 2012-04-14 15:58:17

+0

這是不是很好的測試,希望它會爲你工作。代碼是純Python,應該很容易測試。 – tillsten 2012-04-14 15:59:23

+0

'scipy.opimize.nnls'也是一個很好的提示。簡單地約束到非負值可能確實足夠了。 'numpy.linalg.lstsq'解決方案似乎正在平衡巨大的積極'b'值,同時具有同樣巨大的負值'b'值。 – ulmangt 2012-04-14 19:05:09

9

你提到你會發現套索迴歸或嶺迴歸可以接受的。 scikit-learn包裝中提供了這些和其他許多受限制的線性型號。檢查出section on generalized linear models

通常約束係數涉及某種正則化參數(C或alpha)---一些模型(以CV結尾的模型)可以使用交叉驗證來自動設置這些參數。您還可以進一步將模型限制爲僅使用正係數 - 例如,在Lasso模型中有一個選項。