У меня есть относительно большой набор данных (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 коэффициентов?
Отдельно, я поступаю правильно? Был бы лучший или более эффективный способ приблизиться к этому?
Спасибо!