python数据分析之模型调用
进入模型调用,就是数据分析的最后一步了…
前面的工作已经把模型训练好了,接下来就是调用它,用真实的数据来实现预测或者分类。
当我们调用模型时,就是利用这个训练好的黑箱。通过接收新来的数据,输出属于哪一类(分类器模型)。
当我有新的数据集产生时,我应该如何调用呢?
想想把大象关在冰箱里面分几步?
答案是:
1.打开冰箱
2.把大象放入冰箱
3.关闭冰箱门
总共3步
模型调用也是一样的
举一个全连接的神经网络分类器的栗子
步骤:
- 把黑箱拿出来
- 输入input
- 输出output
#模型调用
from keras.models import load_model
from sklearn.preprocessing import LabelEncoder
model = load_model("model.h5")
#对数据进行预处理,处理成与你训练时的数据类型格式一样就好了。
X,y=get_database('test')#这里我封装成了一个函数,直接接受一个数据库名作为参数。
# 使用LabelEncoder将字符串标签转换为整数标签
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)
# 数据预处理:将特征进行标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
#预测
predictions = model.predict(X_scaled)
predictions输出
**稍微解释一下:**在神经网络的分类问题中,通常会给每个类别分配一个唯一的标签或索引。在输出结果中,每个位置对应的索引即代表了模型预测的类别。索引从0开始,依次递增。
因此,第一个类别对应的索引是0。在你的输出结果中,第一个样本的预测概率分布为 [9.9566501e-01 3.3177581e-05 1.9503545e-04 3.9907331e-03 1.1607822e-04],第一个位置的概率最高,表示模型预测该样本属于第一个类别(索引为0)的概率最高。
比如有5类,分成苹果、橙子、梨子、橘子、柚子五类。index是从0-4,当一个predictions预测概率分布为[0.8,0.05,0.1,0.01,0.04],此时应该是:0-苹果。哪应该如何把这个对应起来?
一开始想的办法是:找到每个中样本中最大的概率值,记录下它所在的index,再定义映射关系的字典,最后进行匹配。匹配后再与最初的y数据进行对比,计算准确率!即可完成任务。
这里,请允许我再次得为python股掌👏
因为你不用写了,直接调用方法就好了
# 获取每个样本预测概率最高的类别对应的整数标签
predictions_encoded = np.argmax(predictions, axis=1) #记录index
# 使用LabelEncoder的inverse_transform方法将整数标签转换为原始字符串标签
predictions_original = label_encoder.inverse_transform(predictions_encoded)
# 计算准确率
accuracy = accuracy_score(y_true=y, y_pred=predictions_original)
到此,整个模型调用和数据分析的任务基本结束了!
最后附上我的源码,需要数据的朋友可以后台私信我!
"""
@contact: 微信 XQCqazwsx
@time: 2024/2/29 19:30
@author: 瑞翼工人
"""
if __name__ == '__main__':
model = load_model('my_model.h5')
X,y=get_database('final_gs')
# 使用LabelEncoder将字符串标签转换为整数标签
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)
# 数据预处理:将特征进行标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
#自己尝试写的过程
# label_mapping = pd.DataFrame({'Original Label':y, 'Encoded Label':y_encoded})
# map_2 = label_mapping.groupby('Original Label').first()
predictions = model.predict(X_scaled)
# 获取每个样本预测概率最高的类别对应的整数标签
predictions_encoded = np.argmax(predictions, axis=1)
# 使用LabelEncoder的inverse_transform方法将整数标签转换为原始字符串标签
predictions_original = label_encoder.inverse_transform(predictions_encoded)
# 计算准确率
accuracy = accuracy_score(y_true=y, y_pred=predictions_original)
# 打印预测结果
print(predictions_original)
print(accuracy)
如果对你有用,请给我点个免费的赞,我们一起进步!