Как обращаться с коэффициентами регрессии logisti c после масштабирования? - PullRequest
1 голос
/ 19 февраля 2020

У меня есть относительно большой набор данных (6M строк, 72 столбца), который мне нужно смоделировать с помощью регрессии logisti c.

Для начала я использую FeatureAgglomeration Python, чтобы уменьшить количество функций. Для этого данные требуют стандартизации. Код похож на приведенный ниже:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=1)

#Standardize features
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train_std=pd.DataFrame(sc.fit_transform(X_train), columns=X.columns)
X_test_std=pd.DataFrame(sc.transform(X_test), columns=X.columns)

#cluster variables to reduce dimensionality
from sklearn.cluster import FeatureAgglomeration
agglo=FeatureAgglomeration(n_clusters=23).fit(X_train_std)

sorted(zip(X_train_std,agglo.labels_),key=lambda t: t[1])

Затем я беру переменную из каждого из полученных кластеров и создаю список переменных.

cols = ['COLUMN1', 'COLUMN2', 'COLUMN3' ... 'COLUMN23']

Наконец, я использую новый набор переменных в регрессии:

from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression(solver='lbfgs')
logmodel.fit(X_train[cols],y_train)
predictions = logmodel.predict(X_test[cols])

Однако мне нужно иметь возможность интерпретировать модель, особенно коэффициенты. Коэффициенты теперь масштабируются, хотя.

В сети я нашел некоторый код, который пытался использовать, чтобы вернуть коэффициенты в «нормальное состояние»:

coefficients = np.true_divide(logmodel.coeff_,  sc.scale_)

Однако здесь есть два размера: лог-модель имеет 23 коэффициента, основанных на мой выбор переменных, но в s c .scale_ есть 72 переменные, основанные на том факте, что я изначально передал свой полный набор данных для масштабирования до сокращения возможностей.

Есть ли способ, которым я могу просто ' обратная шкала соответствующих 23 коэффициентов?

Отдельно, я поступаю правильно? Был бы лучший или более эффективный способ приблизиться к этому?

Спасибо!

...