簡體   English   中英

將 LinearRegression(來自 sklearn.linear_model)系數保存在列表中

[英]Saving LinearRegression (from sklearn.linear_model) coefficients in a list

我陷入了一個應該非常簡單的問題。 我正在運行四個簡單的線性回歸(僅更改 x 變量),對於所有回歸,我需要將截距和 scope 系數存儲在一個列表中。

我認為這會很容易,但似乎我不擅長處理列表。 結果為列表中的所有四個模型存儲了相同的系數。

這是我的代碼:

from sklearn.linear_model import LinearRegression
variables = ['Number_of_likes','Number_of_comments','Number_of_followers','Number_of_repplies']
models = [None] * 4


lm = LinearRegression()
#Fit regressions
models[0] = lm.fit(X[[variables[0]]],y)
models[1] = lm.fit(X[[variables[1]]],y)
models[2] = lm.fit(X[[variables[2]]],y)
models[3] = lm.fit(X[[variables[3]]],y)

當我查看“模型”時,它似乎只將最后一次回歸的結果存儲在所有四個插槽中。

希望我能很好地解釋我的問題。

lm.fit()將修改現有實例,而不是創建它的新副本。 此外, models列表將通過引用存儲這些實例,從而產生您所看到的行為。

為了解決這個問題,您需要在每次想要將其擬合到新輸入時創建一個新的LogisticRegression ,而不是重復使用相同的舊 model。 例如:

models = []    # just an empty list; we will append our models to it one by one
for var in variables:
    lm = LinearRegression()  # create a new object
    lm.fit(X[[var]], y)      # fit it
    models.append(lm)        # add it to the list

或者,對您的原始代碼更忠實的版本是(使用sklearn.base.clone ):

from sklearn.base import clone  # to create a new copy of the lm object

lm = LinearRegression()
#Fit regressions
models[0] = clone(lm).fit(X[[variables[0]]],y)
models[1] = clone(lm).fit(X[[variables[1]]],y)
models[2] = clone(lm).fit(X[[variables[2]]],y)
models[3] = clone(lm).fit(X[[variables[3]]],y)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM