机器学习中预测概率的获取

2024-10-05 10:10:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这个ML模型进行了培训并将其转储,以便我可以在任何地方使用它。我不仅需要得到scorepredict值,还需要predict_proba

我可以得到,但问题是,我期望概率在01之间,但是我得到了下面这样的结果

array([[1.00000000e+00, 2.46920929e-12],
       [1.00000000e+00, 9.89834607e-11],
       [9.99993281e-01, 6.71853451e-06],
       ...,
       [1.22327143e-01, 8.77672857e-01],
       [9.99999653e-01, 3.47049875e-07],
       [1.00000000e+00, 3.79462343e-10]])

这是我正在使用的python代码


%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pickle
from sklearn.model_selection import train_test_split

from sklearn.preprocessing import LabelEncoder


# dataframe = pd.read_csv("hr_dataset.csv")
dataframe = pd.read_csv("formodel.csv")

dataframe.head(2)

# spare input and target variables
inputs = dataframe.drop('PerformanceRating', axis='columns')

target = dataframe['PerformanceRating']

MaritalStatus_ = LabelEncoder()
JobRole_ = LabelEncoder()
Gender_ = LabelEncoder()
EducationField_ = LabelEncoder()
Department_ = LabelEncoder()
BusinessTravel_ = LabelEncoder()
Attrition_ = LabelEncoder()
OverTime_ = LabelEncoder()
Over18_ = LabelEncoder()

inputs['MaritalStatus_'] = MaritalStatus_.fit_transform(inputs['MaritalStatus'])
inputs['JobRole_'] = JobRole_.fit_transform(inputs['JobRole'])
inputs['Gender_'] = Gender_.fit_transform(inputs['Gender'])
inputs['EducationField_'] = EducationField_.fit_transform(inputs['EducationField'])
inputs['Department_'] = Department_.fit_transform(inputs['Department'])
inputs['BusinessTravel_'] = BusinessTravel_.fit_transform(inputs['BusinessTravel'])
inputs['Attrition_'] = Attrition_.fit_transform(inputs['Attrition'])
inputs['OverTime_'] = OverTime_.fit_transform(inputs['OverTime'])
inputs['Over18_'] = Over18_.fit_transform(inputs['Over18'])


inputs.drop(['MaritalStatus', 'JobRole', 'Attrition' , 'OverTime' , 'EmployeeCount', 'EmployeeNumber',
                'Gender', 'EducationField', 'Department', 'BusinessTravel', 'Over18'], axis='columns', inplace=True)


inputsNew = inputs
inputs.head(2)


# inputs = scaled_df
X_train, X_testt, y_train, y_testt = train_test_split(inputs, target, test_size=0.2)



loaded_model = pickle.load(open(filename, 'rb'))
result = loaded_model.score(X_testt, y_testt)
print(result)
loaded_model.predict_proba(inputs) // this produces above result, will put it below as well

输出由loaded_model.predict_proba(inputs)产生

array([[1.00000000e+00, 2.46920929e-12],
       [1.00000000e+00, 9.89834607e-11],
       [9.99993281e-01, 6.71853451e-06],
       ...,
       [1.22327143e-01, 8.77672857e-01],
       [9.99999653e-01, 3.47049875e-07],
       [1.00000000e+00, 3.79462343e-10]])

如何转换这些值或获得百分比输出?(eg: 12%, 50%, 96%


Tags: importdataframemodeltransformgenderfitdepartmentinputs
2条回答

要将概率数组从十进制转换为百分比,可以编写(loaded_model.predict_proba(inputs)) * 100

编辑:由loaded_model.predict_proba(inputs)输出的格式只是科学记数法,即所有这些数字都在0和1之间,但其中许多是极小的概率,因此用科学记数法表示

您看到如此小的概率的原因是loaded_model.predict_proba(inputs)[:,0](概率数组的第一列)表示属于一个类的数据的概率,而loaded_model.predict_proba(inputs)[:,1]表示属于另一个类的数据的概率

换句话说,这意味着概率数组的每一行加起来应该是1

我希望这有帮助

loaded_model.predict_proba(inputs)输出第一类和第二类的概率(因为您有两类)。这就是为什么每次出现数据都会看到2个输出。每次发生的总概率总和为1

假设你只关心第二类的概率,你可以用下面的行来获取第二类的概率

loaded_model.predict_proba(inputs)[:,1]

我不确定这是否是您想要的,如果我误解了您的问题,请道歉

相关问题 更多 >

    热门问题