|
|
|
|
|
import joblib |
|
|
import pandas as pd |
|
|
from typing import List, Dict, Union |
|
|
from transformers import Pipeline |
|
|
|
|
|
class LinearRegressionModel: |
|
|
def __init__(self): |
|
|
|
|
|
self.model = joblib.load("linear_regression_model.joblib") |
|
|
|
|
|
def get_coefficients(self, columns: List[str]) -> Dict[str, float]: |
|
|
|
|
|
coefficients = dict(zip(columns, self.model.coef_.tolist())) |
|
|
intercept = self.model.intercept_ |
|
|
return {"coefficients": coefficients, "intercept": intercept} |
|
|
|
|
|
def predict_from_csv(self, columns: List[str], csv_file_path: str) -> List[float]: |
|
|
|
|
|
data = pd.read_csv(csv_file_path)[columns] |
|
|
return self.model.predict(data).tolist() |
|
|
|
|
|
|
|
|
model = LinearRegressionModel() |
|
|
|
|
|
|
|
|
class CustomLinearRegressionPipeline(Pipeline): |
|
|
def __init__(self, model): |
|
|
super().__init__() |
|
|
self.model = model |
|
|
|
|
|
def __call__(self, inputs: Dict[str, Union[List[str], bytes]]) -> Dict[str, Union[Dict[str, float], List[float]]]: |
|
|
columns = inputs.get("columns", []) |
|
|
csv_file = inputs.get("csv_file", None) |
|
|
|
|
|
if not csv_file: |
|
|
return self.model.get_coefficients(columns) |
|
|
else: |
|
|
csv_file_path = "/tmp/input_data.csv" |
|
|
with open(csv_file_path, "wb") as f: |
|
|
f.write(csv_file) |
|
|
|
|
|
|
|
|
predictions = self.model.predict_from_csv(columns, csv_file_path) |
|
|
return {"predictions": predictions} |
|
|
|
|
|
|
|
|
pipeline = CustomLinearRegressionPipeline(model) |
|
|
|