我对Python感到不舒服——更不用说对R感到害怕和自在了。所以请允许我回答一个愚蠢的问题,这个问题让我进行了大量搜索,但都没有成功
我想用sklearn和OLS以及lasso来拟合回归模型。特别是,我喜欢mtcars数据集,它很容易在R中调用,而且事实证明,它在Python中也很容易访问:
import statsmodels.api as sm
import pandas as pd
import statsmodels.formula.api as smf
mtcars = sm.datasets.get_rdataset("mtcars", "datasets", cache=True).data
df = pd.DataFrame(mtcars)
看起来是这样的:
mpg cyl disp hp drat ... qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 ... 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 ... 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 ... 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 ... 19.44 1 0 3 1
在尝试使用LinearRegression()
时,通常的结构是
import numpy as np
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(x, y)
但要做到这一点,我需要选择几列df
以适应回归x
,并选择一列作为自变量y
。例如,我想得到一个x
矩阵,它包括一列1(用于截距),以及disp
和qsec
(数值变量),以及cyl
(分类变量)。在自变量方面,我想使用mpg
如果可以这样说的话
model = LinearRegression().fit(mpg ~['disp', 'qsec', C('cyl')], data=df)
但是我该如何处理它的语法呢
同样地,我怎样才能用套索做同样的事情:
from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.001)
lasso.fit(mpg ~['disp', 'qsec', C('cyl')], data=df)
但这同样不是正确的语法
我确实发现,通过将数据帧转换成矩阵,可以得到实际的回归(OLS或lasso)。但是,列的名称不见了,很难读取每个系数对应的变量。我还没有找到一个简单的方法来运行诊断值,比如p值,或者r平方
这里有两种方法——不令人满意,特别是因为一旦回归开始,变量标签似乎就消失了:
单变量回归mpg(i.v.)~hp(d.v.):
对于多元回归drat~wt+cyl+carb:
您可以尝试statsmodels使用的patsy:
看起来像这样,我们可以省略第一列截取,因为它包含在sklearn中:
但是
model.coef_
中的参数名称将不会命名。你只需要把它们编成一个系列来阅读,也许:sklearn线性回归中的Pvalues,没有现成的方法,您可以查看这些answers,也许其中一个就是您正在寻找的
相关问题 更多 >
编程相关推荐