Порядковая логистическая регрессия: Intercept_ возвращает [1] вместо [n] - PullRequest
0 голосов
/ 28 февраля 2019

Я использую порядковую (т. Е. Полиномиальную) регрессию гребня с использованием библиотеки mord (scikitlearn).

y - это один столбец, содержащий целочисленные значения от 1 до 19.

X состоит из 7 числовых переменных, заключенных в 4 сегмента, и помещается в финал из 28 двоичных переменных.

import pandas as pd
import numpy as np    
from sklearn import metrics
from sklearn.model_selection import train_test_split
import mord

in_X, out_X, in_y, out_y = train_test_split(X, y,
                                            stratify=y,
                                            test_size=0.3,
                                            random_state=42)

mul_lr = mord.OrdinalRidge(alpha=1.0,
                           fit_intercept=True,
                           normalize=False,
                           copy_X=True,
                           max_iter=None,
                           tol=0.001,
                           solver='auto').fit(in_X, in_y)

mul_lr.coef_ возвращает массив [28 x 1], но mul_lr.intercept_ возвращает одно значение (вместо 19).

Есть идеи, что мне не хватает?

1 Ответ

0 голосов
/ 05 марта 2019

Если вы хотите, чтобы ваша модель предсказывала все 19 категорий, вам необходимо сначала преобразовать метку y в одну горячую кодировку, прежде чем обучать модель.

from sklearn.preprocessing import OneHotEncoder

y-=1 # range from 1 to 19 -> range from 0 to 18
enc = OneHotEncoder(n_values=19)
y = enc.fit_transform(y).toarray()
"""
train a model
"""

Теперь mul_lr.intercept_.shape должно быть(19,).

...