Передайте обновленные функции модели в логистическую регрессию и получите прогнозируемый результат на тестовом наборе - PullRequest
0 голосов
/ 25 августа 2018

Я новичок в статистическом моделировании, поэтому, пожалуйста, прости, если я ошибаюсь по этому поводу.

В настоящее время я работаю над функцией в python, которая будет прогнозировать оценку точности для модели логистической регрессии на наборе тестовых данных. Пользователь будет иметь возможность предоставлять параметры / коэффициенты модели (кроме тех, которые сгенерированы обучающей моделью - часть требования). У меня есть функциональный код, который обновляет коэффициенты, но точность или прогноз набора тестовых данных остаются неизменными, независимо от того, какие параметры модели я предоставляю. Насколько я понимаю, оценка на тестовом наборе должна измениться, если я изменю коэффициенты модели?

Я использую библиотеку statsmodel, чтобы упростить мне задачу, и перехожу по этой ссылке . Может кто-нибудь, пожалуйста, помогите мне понять, что я скучаю? Ниже приведен код

import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt
%matplotlib inline
import statsmodels.formula.api as sm
from sklearn.model_selection import train_test_split

data = pd.read_csv("E:\\Dev\\testing\\rawdata.txt", header=None, 
               names=['Exam1', 'Exam2', 'Admitted'])
X = data.copy() # ou training data
y = X.Admitted.copy() # copy “y” column values out
X.drop(['Admitted'], axis=1, inplace=True) # then, drop y column
# manually add the intercept
X['intercept'] = 1.0  # so we don't need to use sm.add_constant every time
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)
model = sm.Logit(y_train, X_train)
result = model.fit()
print("old parameters :\n" + str(list(result.params)))
#New parameters supplied
mdict = { 'Exam1':10000000.2234, 'Exam2':1.1233423, 'intercept':2313.423 }
result.params = mdict
print("New parameters: \n"+str(result.params))

def logitPredict(modelParams, X, threshold):  
     probabilities = modelParams.predict(X)
    return [1 if x >= threshold else 0 for x in probabilities]

predictions = logitPredict(result, X_test, .5)
accuracy = np.mean(predictions == y_test)
#accuracy always remains same as train model
print ('accuracy = {0}%'.format(accuracy*100)  )
#test sample
myExams = pd.DataFrame({'Exam1': [40.], 'Exam2': [78.], 'intercept': [1.]})
myExams
print ('Your probability = {0}%'.format(result.predict(myExams)[0]*100)) 
...