Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将更新后的模型特征传递给逻辑回归,并在测试集上获得预测分数_Python_Scikit Learn_Logistic Regression_Statsmodels_Coefficients - Fatal编程技术网

Python 将更新后的模型特征传递给逻辑回归,并在测试集上获得预测分数

Python 将更新后的模型特征传递给逻辑回归,并在测试集上获得预测分数,python,scikit-learn,logistic-regression,statsmodels,coefficients,Python,Scikit Learn,Logistic Regression,Statsmodels,Coefficients,我是统计建模新手,所以如果我在这一点上弄错了,请原谅 我目前正在用python编写一个函数,该函数将在测试数据集上预测物流回归模型的准确度分数。用户可以灵活地提供模型参数/系数(由需求的培训模型部分生成的参数/系数除外)。我有一个更新系数的功能代码,但无论我提供的模型参数有多不同,测试数据集的准确性或预测都保持不变。我的理解是,如果我改变模型系数,测试集上的分数应该改变 我正在使用statsmodel库来简化我的工作,并遵循这一点。有人能帮我理解我错过了什么吗?下面是代码 import pand

我是统计建模新手,所以如果我在这一点上弄错了,请原谅

我目前正在用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)) 

如何将不同的参数传递给计算精度的函数?这里不存在?我在上面的代码中声明了dictionary mdct并替换了result.params=mdct参数。我使用与更新模型相同的模型结果对象来预测新的输出。遗憾的是,我不明白为什么模型预测会从进一步调试中返回相同的值,因为在预测函数中似乎没有使用params属性。我查看了模型对象的其他属性(本例中为“结果”),如co_variates()。我将看一看实际用于计算精度的属性。它们有很多,所以在我发布解决方案之前可能需要一段时间。