如何将Pandas数据框转换为可部署的机器学习求和预测模型?
实现符合要求的启发式基线模型
1. 构建自定义模型类
要让规则逻辑适配机器学习模型接口(支持fit/predict方法、兼容pickle序列化),可以基于scikit-learn的基类实现自定义模型:
import pandas as pd from sklearn.base import BaseEstimator, RegressorMixin class HeuristicSumModel(BaseEstimator, RegressorMixin): def fit(self, X, y=None): # 规则模型无需训练逻辑,直接返回自身 return self def predict(self, X): # 实现A、B列求和的核心逻辑 if not isinstance(X, pd.DataFrame): X = pd.DataFrame(X, columns=['A', 'B']) return X['A'] + X['B']
2. 测试模型功能
用示例数据验证模型的predict方法:
# 示例输入数据 X = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 实例化模型并执行预测 model = HeuristicSumModel() pred = model.predict(X) print(pred) # 输出: # 0 5 # 1 7 # 2 9 # dtype: int64
3. 验证pickle序列化
测试模型的保存与加载能力,确保部署场景下的可用性:
import pickle # 序列化模型到文件 with open('sum_model.pkl', 'wb') as f: pickle.dump(model, f) # 从文件反序列化模型 with open('sum_model.pkl', 'rb') as f: loaded_model = pickle.load(f) # 验证加载后的模型功能正常 print(loaded_model.predict(X).equals(pred)) # 输出:True
4. 部署为API服务
以FastAPI为例快速搭建预测服务:
安装依赖
pip install fastapi uvicorn pandas scikit-learn
编写服务代码(main.py)
from fastapi import FastAPI import pandas as pd import pickle # 加载预序列化的模型 with open('sum_model.pkl', 'rb') as f: model = pickle.load(f) app = FastAPI() @app.post("/predict") def predict(data: dict): # 将请求数据转换为DataFrame格式 X = pd.DataFrame(data['data']) # 执行预测并转换为列表格式返回 pred = model.predict(X).tolist() return {"predictions": pred}
启动服务
uvicorn main:app --reload
测试API
用curl发送POST请求验证:
curl -X POST "http://localhost:8000/predict" -H "Content-Type: application/json" -d '{"data": [{"A":1, "B":4}, {"A":2, "B":5}]}'
返回结果:
{"predictions": [5,7]}
内容的提问来源于stack exchange,提问作者Andrzej Wodecki
相关产品推荐
相关产品推荐

