- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在 scikit learn 中的数据集上运行套索。这是我的设计矩阵(X)的样子:
Year Country SW NY.GDP.DEFL.KD.ZG.1 NY.GDP.PCAP.KD.ZG NY.GDP.DEFL.KD.ZG NE.IMP.GNFS.ZS NY.GDP.DISC.CN FS.AST.PRVT.GD.ZS FS.AST.DOMS.GD.ZS NY.GDS.TOTL.ZS NY.GDP.DISC.KN NY.GDP.NGAS.RT.ZS NY.GDP.PETR.RT.ZS NY.GDP.COAL.RT.ZS NY.GDP.MINR.RT.ZS NY.GDP.TOTL.RT.ZS MS.MIL.XPND.GD.ZS
0 0 0 1 -3576217.383052 -5146876.546040 -3471506.772186 -2633821.885258 -3.680928e+06 91.575314 99.278420 -5670429.600369 -3.785639e+06 -4832744.713442 -5461008.378638 -3366796.16132 -3995059.826515 -5565718.989504 -1691426.387465
1 1 0 1 5.713486 0.563529 4.713486 21.969161 -5.000000e+06 88.625556 92.244479 23.625253 1.309500e+10 1.089173 0.983267 0.00000 1.471053 3.860570 2.057921
2 2 0 1 3.559686 2.640931 2.559686 21.466621 -1.000000e+06 87.785550 93.413707 24.273287 1.558700e+10 1.014641 1.021970 0.00000 1.371797 3.681716 1.925137
3 3 0 1 1.337874 3.811404 0.337874 20.646004 1.000000e+06 84.262083 91.313310 23.840716 1.962200e+10 0.445549 0.412880 0.00000 1.079369 2.178213 1.994438
4 0 1 1 7.638720 9.914861 6.638720 25.640006 -1.305679e+11 129.923249 146.277785 51.979295 -6.818467e+11 0.164374 1.500932 2.37375 2.563449 6.954085 2.079635
它一开始就具有三个分类特征。
这是我的目标向量(Y)的样子:
0 -0.003094
1 -0.015327
2 0.100617
3 0.067728
4 0.089962
两者目前都是 pandas 数据框/系列。
现在我使用 scikit.from 的 oneHotEncoder 在 X 中重新编码我的分类变量
sklearn import preprocessing
X_train=preprocessing.OneHotEncoder(categorical_features=[0,1,2],sparse=False).fit_transform(data_train)
这会将数据转换为如下所示:
X_train[0:2]
Out[473]:
array([[ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 1.00000000e+00,
-3.57621738e+06, -5.14687655e+06, -3.47150677e+06,
-2.63382189e+06, -3.68092799e+06, 9.15753144e+01,
9.92784200e+01, -5.67042960e+06, -3.78563860e+06,
-4.83274471e+06, -5.46100838e+06, -3.36679616e+06,
-3.99505983e+06, -5.56571899e+06, -1.69142639e+06],
[ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 1.00000000e+00,
5.71348642e+00, 5.63529053e-01, 4.71348642e+00,
2.19691610e+01, -5.00000000e+06, 8.86255560e+01,
9.22444788e+01, 2.36252526e+01, 1.30950000e+10,
1.08917343e+00, 9.83266854e-01, 0.00000000e+00,
1.47105308e+00, 3.86057046e+00, 2.05792067e+00]])
在此之后我进行缺失值插补:
X_imputed=preprocessing.Imputer().fit_transform(X_train)
X_imputed[0:1]
Out[474]:
array([[ 1. , 0. , 0. ,
0. , 1. , 0. ,
0. , 0. , 0. ,
0. , 0. , 0. ,
0. , 0. , 1. ,
-3576217.38305151, -5146876.54603993, -3471506.77218561,
-2633821.88525845, -3680927.9939174 , 91.57531444,
99.27842 , -5670429.60036941, -3785638.6047833 ,
-4832744.71344225, -5461008.37863762, -3366796.16131972,
-3995059.82651509, -5565718.98950351, -1691426.3874654 ]])
现在我开始对变量的顺序感到困惑,因为在使用 oneHotencoder 之后,我的数据帧被转换为 numpy 数组并删除了标题。所以我不确定前 13 列(它们是三个类别的虚拟列是什么以及按什么顺序排列?
其次,我继续运行 LassoCV 以获得 Lasso 的正确 alpha 值和相应的系数。
from sklearn import linear_model
lasso=linear_model.LassoCV(max_iter=2000,cv=10,normalize=True)
lasso.fit(X_imputed,Y_train)
当我使用交叉验证检查它最终选择的 alpha 值时它给出了这个:
lasso.alpha_
Out[476]:
4.1303618102099771e-05
所以我假设这个 alpha 值是最好的,它在所有 10 次折叠中给出了最小的 MSE。
但是现在,当我尝试找到它尝试过的所有 alpha 的套索路径时,这就是我得到的。我正在创建一个 numpy 数组来存储 lasso 选择的每个 alpha 的所有 10 倍的 MSE(10 个 alpha 为 10 倍)
scores=np.zeros((100,2))
scores[:,0]=lasso.mse_path_[:,0]
scores[:,1]=np.mean(lasso.mse_path_[:,1:],axis=1)
scr=scores[scores[:,1].argsort()]
由于我已按每个 alpha 的 MSE 升序对分数矩阵进行排序,因此我希望第一条记录显示分数为最小值的 alpha。
scr[0]
Out[477]:
array([ 441334.91133953, 0.00739538])
但是我发现 alpha 值与我在上述步骤中使用 lasso.alpha_ 得到的值完全不同。这是 -5 次方,这是 +5 次方。这是为什么?。
第三,这是我的套索系数向量。我如何知道哪个系数映射到原始数据集(data_train)中的哪个特征?这就是我最终需要从最佳选择的 alpha 中获取与每个特征相对应的权重。
lasso.coef_
Out[478]:
array([ 0.02930289, 0.01039652, -0. , -0.05448752, 0.01310975,
0. , -0.03755883, 0.02754805, -0.0498908 , -0.10531218,
-0.08303772, 0.00465392, 0. , -0.04597282, 0. ,
0.00000003, 0. , 0. , 0. , 0. ,
-0.00101291, 0.00155892, 0. , 0. , 0. ,
0. ,
现在因为标题被删除了,我不知道哪些权重对应于哪个功能。另外,为什么当我选择 lasso.alpha_ 或当我执行 lasso_mse_path_ 并检查最低 mse 时,alpha 值不同。
有什么想法吗?
最佳答案
要将特征索引关联回原始特征列,您可以在拟合后使用 OneHotEncoder
的 feature_indices_
属性:
from sklearn import preprocessing
encoder = preprocessing.OneHotEncoder(categorical_features=[0,1,2])
X_train = encoder.fit_transform(data_train)
print encoder.feature_indices_
输出:
[0 4 6 8]
根据documentation :
feature_indices_ : array of shape (n_features,) Indices to feature ranges. Feature i in the original data is mapped to features from feature_indices_[i] to feature_indices_[i+1] (and then potentially masked by active_features_ afterwards)
在本例中,one-hot 编码空间中的前 4 个维度对应于列 Year
,接下来的 2 个维度对应于列 Country
,最后 2 个维度对应于列SW
。
关于python - 将系数向量分配回 scikit learn Lasso 中的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29852233/
我试图将 javascript 数组从 jquery ajax 调用传递到 lasso 脚本,但在尝试在 lasso 脚本中访问它时,它返回空记录。 我确信我在代码中遗漏了一些东西,但无法弄清楚它是什
我想创建一个模型来描述我的数据行为。我尝试了简单线性回归、简单多项式回归和正则化和交叉验证的多项式回归。 我发现最后一种方法允许自动特征选择(带度数),我实际上需要它,因为简单的线性回归表现不佳。我关
这是我的代码。当我运行它时,山脊很好,但是对于套索,我收到错误消息: ConvergenceWarning: Objective did not converge. You might want to
我有一个非常大的数据集,其中包含 100 多个系数和数千个条目。因此,我想使用 Lasso 方法进行模型训练。 我目前正在研究以下 sci-kit 文档: Lasso LassoCV 虽然实现看起来很
我想一次选择多个标记,并通过绘制套索来选择标记,然后选择套索区域旁边的标记,但实际上我不知道该怎么做,而且我没有找到任何包或教程这样做我想知道是否有人可以帮助我,即使只是告诉我逻辑而不是完整的代码。
我正在尝试使用 LASSO 确定我的特征在分类中的重要性。但是,我找不到任何关于这样做的引用或指南。我知道 LASSO 主要适用于回归,但是,有什么方法或指南可以解决吗? 如果没有办法,有没有其他类似
我正在寻找在 scikit-learn 的 Lasso/LassoCV 中添加交互项。如果是两个连续变量之间或两个分类变量之间的交互作用,我可以添加与交互中每个元素的乘法相对应的列。但是当我们在分类变
我有这个套索回归代码,当我打印 beta 系数时,我得到许多组 beta 值,而不仅仅是一组。我没有为 lambda 指定任何值,但当我这样做时,我只得到一组 beta 值。我知道如何找到 lambd
我正在 sklearn 中进行回归项目,我在其中对各种数字和分类变量使用了 LASSO 回归。使用 One-hot-encoder 方法转换分类变量。 由于一开始对特征矩阵进行了归一化处理,所以最终L
我目前使用 sklearn.linear_model 模块实现了 Ridge 和 Lasso 回归。 但是,套索回归在同一数据集上的效果似乎差了 3 个数量级! 我不确定哪里出了问题,因为从数学上讲,
我想用 lasso 在 python 中执行多元线性回归。我不确定输入观察矩阵 X 是否可以包含分类变量。我从这里阅读了说明:lasso in python 但它很简单,并没有指明允许的类型。例如,我
glmnet 中有没有办法进行一阶交互? 例如,如果我的 X 矩阵是: V1 V2 V3 0 1 0 1 0 1 1 0 0 ... 有没有办法指定它在不手动创建列的情况下按照 `y
我正在尝试在网页上实现这种功能: 通过拖动鼠标选择正方形区域 选取所选区域中的所有元素 处理它们 => 所以我基本上想创建类似“photoshop 方形选择工具”的东西,它可以获取所选区域中的所有 H
我有大约 22 个数据预测变量 x_i,我想减少到一定数量以便最好地描述 y。基本问题...但是,我很不清楚如何使用 scikit 和 Linearmodel.lassoLars 来执行此任务。 从他
我正在尝试弄清楚如何在使用 RobustScalar 和 Lasso 后取消缩放数据(大概使用 inverse_transform)以进行预测。下面的数据只是一个例子。我的实际数据更大、更复杂,但我希
我认为下面的 Lasso 问题有简单的解决方案 [1,2,0,0] 因为 np.dot(x, [1,2,0,0]) 返回 [[5,7,6,8]]。 clf = linear_model.Lasso(a
我目前正在高维情况下用scikit试验Lasso。标签是 Y_i(实数),特征是 X_i(X_i 是大小为 d=112 的向量)。我只有三对 (Y_i,X_i)。 d>>n=3 所以我们处于高维情况。
我很想在 statsmodels 中使用线性 LASSO 回归,以便能够使用“公式”符号来编写模型,这将在处理许多分类变量及其交互时节省我相当多的编码时间。但是,它似乎还没有在统计模型中实现? 最佳答
在我重新发明轮子之前...... 我正在用 C# 编写代码,因此需要一个 .NET 解决方案。我想处理一个灰度图像,它可以被分解成多个区域,这些区域可以被定义为具有较低和较高的颜色阈值(或“暗度”)—
我想获得 LASSO 回归的置信区间。为此,我使用了 selective inference R 中的包。 此包中的 fixedLassoInf 函数为给定的 lambda 值提供套索回归的置信区间。
我是一名优秀的程序员,十分优秀!