-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
49 lines (38 loc) · 1.33 KB
/
main.py
File metadata and controls
49 lines (38 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from fastapi import FastAPI
import joblib
from pydantic import BaseModel
import numpy as np
import pandas as pd
from custom_transformers import CombinedAttributesAdder # needed for loading
class CombinedAttributesAdder:
def __init__(self, add_bedrooms_per_room=True):
self.add_bedrooms_per_room = add_bedrooms_per_room
def fit(self, X, y=None):
return self
def transform(self, X):
rooms_per_household = X[:, 3] / X[:, 5]
population_per_household = X[:, 4] / X[:, 5]
if self.add_bedrooms_per_room:
bedrooms_per_room = X[:, 2] / X[:, 3]
return np.c_[X, rooms_per_household, population_per_household, bedrooms_per_room]
else:
return np.c_[X, rooms_per_household, population_per_household]
app = FastAPI()
# Load model
pipeline = joblib.load("pipeline.pkl")
class HouseFeatures(BaseModel):
longitude: float
latitude: float
housing_median_age: float
total_rooms: float
total_bedrooms: float
population: float
households: float
median_income: float
ocean_proximity: str
@app.post("/predict")
def predict(features: HouseFeatures):
input_dict = features.dict()
input_df = pd.DataFrame([input_dict]) # wrap input in a DataFrame
prediction = pipeline.predict(input_df)
return {"prediction": prediction[0]}