Я обучил модель с помощью классификатора LogisticRegression от scikit-learn (многочлен / мультикласс). Затем я сохранил коэффициенты из модели в файл. Затем я загрузил коэффициенты в мою собственную самореализацию softmax, которая, как утверждает документация scikit-learn , используется классификатором регрессии Logisti c для полиномиального случая. Однако прогнозы не совпадают.
- Обучение модели mlo git с scikit-learn
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import json
# Split data into train-test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
# Train model
mlr = LogisticRegression(random_state=21, multi_class='multinomial', solver='newton-cg')
mlr.fit(X_train, y_train)
y_pred = mlr.predict(X_test)
# Save test data and coefficients
json.dump(X_test.tolist(), open('X_test.json'), 'w'), indent=4)
json.dump(y_pred.tolist(), open('y_pred.json'), 'w'), indent=4)
json.dump(mlr.classes_.tolist(), open('classes.json'), 'w'), indent=4)
json.dump(mlr.coef_.tolist(), open('weights.json'), 'w'), indent=4)
Самореализация softmax через
Scipy from scipy.special import softmax
import numpy as np
import json
def predict(x, w, classes):
z = np.dot(x, np.transpose(w))
sm = softmax(z)
return [classes[i] for i in sm.argmax(axis=1)]
x = json.load(open('X_test.json'))
w = json.load(open('weights.json'))
classes = json.load(open('classes.json'))
y_pred_self = predict(x, w, classes)
Результаты не совпадают По сути, когда я сравниваю
y_pred_self
с
y_pred
, они не совпадают (примерно на 85% похоже).
Так что мой вопрос в том, имеет ли софтмакс-учение softmax или predict
реализация нестандартные / скрытые настройки?
Примечание: я также попробовал самореализацию в Ruby, и она также дает прогнозы, которые выключены.