猿问

计算多项式 logit 模型预测概率

请尝试给出参数化解决方案(有三个以上的选择)。


我有一个带有 beta 值的字典:


{'B_X1': 2.0, 'B_X2': -3.0}

而这个数据框:


 X1_123  X1_456  X1_789  X2_123  X2_456  X2_789

   6.75    4.69    9.59    5.52    9.69    7.40

   7.46    4.94    3.01    1.78    1.38    4.68

   2.05    7.30    4.08    7.02    8.24    8.49

   5.60    7.88    8.11    5.98    4.60    1.39

   1.80    8.28    9.16    7.34    7.69    6.16

   3.73    6.93    8.93    2.58    3.48    6.04

   8.06    8.88    7.06    6.76    4.68    7.82

   5.00    7.29    5.86    3.92    5.67    4.10

   2.49    2.55    4.66    7.15    6.26    7.87

   1.50    3.35    5.70    9.86    4.83    1.17

   8.19    7.72    9.56    6.61    4.15    3.64

   2.43    9.54    9.15    4.41    9.18    7.85

   2.71    3.24    4.56    6.22    7.89    9.93

   5.96    4.34    5.26    8.63    9.81    9.40

123, 456, 和789是备选方案。


我想使用这个公式计算预测概率:

j, k, 和s是提到的替代方案。


预期结果:


 X1_123  X1_456  X1_789  X2_123  X2_456  X2_789  P_123  P_456  P_789

   6.75    4.69    9.59    5.52    9.69    7.40  0.490  0.000  0.510

   7.46    4.94    3.01    1.78    1.38    4.68  0.979  0.021  0.000

   2.05    7.30    4.08    7.02    8.24    8.49  0.001  0.998  0.001

   5.60    7.88    8.11    5.98    4.60    1.39  0.000  0.000  1.000

   1.80    8.28    9.16    7.34    7.69    6.16  0.000  0.002  0.998

   3.73    6.93    8.93    2.58    3.48    6.04  0.024  0.952  0.024

   8.06    8.88    7.06    6.76    4.68    7.82  0.000  1.000  0.000

   5.00    7.29    5.86    3.92    5.67    4.10  0.210  0.107  0.683

   2.49    2.55    4.66    7.15    6.26    7.87  0.038  0.623  0.339

   1.50    3.35    5.70    9.86    4.83    1.17  0.000  0.000  1.000

   8.19    7.72    9.56    6.61    4.15    3.64  0.000  0.005  0.995

   2.43    9.54    9.15    4.41    9.18    7.85  0.041  0.037  0.922

   2.71    3.24    4.56    6.22    7.89    9.93  0.981  0.019  0.001

   5.96    4.34    5.26    8.63    9.81    9.40  0.975  0.001  0.024

每行的概率总和应该为 1。


请尝试给出参数化解决方案(有三个以上的选择)。


慕后森
浏览 122回答 1
1回答

森栏

国际大学联盟:将列转换为 MultiIndexdf = df.set_axis(df.columns.str.split('_', expand=True), axis=1, inplace=False)并定义你B的键匹配前缀dfB = {'X1': 2.0, 'X2': -3.0}然后def f(b, x):    return np.exp((b * x).sum(1))parts = f(B, df.stack()).unstack()preds = parts.div(parts.sum(1), axis=0)df.join(pd.concat({'P': preds}, axis=1).round(3)).pipe(    lambda d: d.set_axis(map('_'.join, d.columns), axis=1, inplace=False))    X1_123  X1_456  X1_789  X2_123  X2_456  X2_789  P_123  P_456  P_7890     6.75    4.69    9.59    5.52    9.69    7.40  0.490  0.000  0.5101     7.46    4.94    3.01    1.78    1.38    4.68  0.979  0.021  0.0002     2.05    7.30    4.08    7.02    8.24    8.49  0.001  0.998  0.0013     5.60    7.88    8.11    5.98    4.60    1.39  0.000  0.000  1.0004     1.80    8.28    9.16    7.34    7.69    6.16  0.000  0.002  0.9985     3.73    6.93    8.93    2.58    3.48    6.04  0.024  0.952  0.0246     8.06    8.88    7.06    6.76    4.68    7.82  0.000  1.000  0.0007     5.00    7.29    5.86    3.92    5.67    4.10  0.210  0.107  0.6838     2.49    2.55    4.66    7.15    6.26    7.87  0.038  0.623  0.3399     1.50    3.35    5.70    9.86    4.83    1.17  0.000  0.000  1.00010    8.19    7.72    9.56    6.61    4.15    3.64  0.000  0.005  0.99511    2.43    9.54    9.15    4.41    9.18    7.85  0.041  0.037  0.92212    2.71    3.24    4.56    6.22    7.89    9.93  0.981  0.019  0.00113    5.96    4.34    5.26    8.63    9.81    9.40  0.975  0.001  0.024包裹在一个漂亮的功能中def f(df, b):    d = df.set_axis(df.columns.str.split('_', expand=True), axis=1, inplace=False)    parts = np.exp(d.stack().mul(b).sum(1).unstack())    preds = pd.concat({'P': parts.div(parts.sum(1), axis=0)}, axis=1).round(3)    d = d.join(preds)    d.columns = list(map('_'.join, d.columns))    return df(df, B)    X1_123  X1_456  X1_789  X2_123  X2_456  X2_789  P_123  P_456  P_7890     6.75    4.69    9.59    5.52    9.69    7.40  0.490  0.000  0.5101     7.46    4.94    3.01    1.78    1.38    4.68  0.979  0.021  0.0002     2.05    7.30    4.08    7.02    8.24    8.49  0.001  0.998  0.0013     5.60    7.88    8.11    5.98    4.60    1.39  0.000  0.000  1.0004     1.80    8.28    9.16    7.34    7.69    6.16  0.000  0.002  0.9985     3.73    6.93    8.93    2.58    3.48    6.04  0.024  0.952  0.0246     8.06    8.88    7.06    6.76    4.68    7.82  0.000  1.000  0.0007     5.00    7.29    5.86    3.92    5.67    4.10  0.210  0.107  0.6838     2.49    2.55    4.66    7.15    6.26    7.87  0.038  0.623  0.3399     1.50    3.35    5.70    9.86    4.83    1.17  0.000  0.000  1.00010    8.19    7.72    9.56    6.61    4.15    3.64  0.000  0.005  0.99511    2.43    9.54    9.15    4.41    9.18    7.85  0.041  0.037  0.92212    2.71    3.24    4.56    6.22    7.89    9.93  0.981  0.019  0.00113    5.96    4.34    5.26    8.63    9.81    9.40  0.975  0.001  0.024
随时随地看视频慕课网APP

相关分类

Python
我要回答