הנוכמ תדימל לש םילדומ תסירפל ישעמ ךירדמ


.ךליבשב אוה הזה ךירדמה ,הנוכמ תדימל לש םילדומ תסירפ לע דוע דומלל שפחמ התא םאו

.ןנעל הסירפו API-ה ןוסחא ,לדומ תויזחת תרשל API תריצי ,לדומה תיינב

:םיאבה םירבדב דקמתמ הז ךירדמ

  • Scikit-learn םע הנוכמ תדימל לדומ תיינב
  • FastAPI תועצמאב לדומהמ תויזחת תרשל REST API תריצי
  • Docker תועצמאב API-ה לכימ

.תורחבנ טלק תונוכת לע תוססובמה תיב יריחמ תויזחת תתרשמה תולוכמב היצקילפא ךל היה

טקיורפה תביבס תרדגה

:םיאבה םירבדה תא תנקתהש אדו ,ליחתתש ינפל

  • (ךליאו Python 3.11 ףידע) Python לש תינכדע הסרג
  • ךלש הלעפהה תכרעמ רובע Docker תא לבק ;תולוכמל רקוד

.API יקשממ םע הדובעו הנוכמ תדימל לש םילדומ תיינבב תיסיסב הנבה ךל היהתש יאדכ ,ת

הדובעה תליחת

:טקיורפה תיירפס רובע (ץלמומה) הנבמה ןלהל

project-dir/
│
├── app/
│   ├── __init__.py       	# Empty file
│   └── main.py           	# FastAPI code for prediction API
│
├── model/
│   └── linear_regression_model.pkl  # Saved trained model (after running model_training.py)
│
├── model_training.py      	# Script to train and save the model
├── requirements.txt       	# Dependencies for the project
└── Dockerfile             	# Docker configuration

.אבה בלשב םלוכ תא ןיקתנ אוב .ליחתהל ידכ Python תוירפס המכ ךרטצנ

:תילאוטריו הביבס לעפהו רוצ ,ךלש טקיורפה תביבסב

$ python3 -m venv v1
$ source v1/bin/activate

.לדומה לש תויזחתה תא תרשל ידכ API-ה תא תונבל Uvicorn-ו FastAPI-ו .הנוכמה תדימל

:pip תועצמאב הלאה תושרדנה תוליבחה תא ןיקתנ ואוב זא

$ pip3 install pandas scikit-learn fastapi uvicorn

.GitHub -ב וז הכרדה רובע דוקה לכ תא אוצמל לוכי התא

הנוכמ תדימל לדומ תיינב

:model_training.py םשב ץבוק רוצ ,טקיורפה תיירפסב .ורחבנש תונוכתה לע ססב

# model_training.py
import pandas as pd
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import pickle
import os

# Load the dataset
data = fetch_california_housing(as_frame=True)
df = data['data']
target = data['target']

# Select a few features
selected_features = ['MedInc', 'AveRooms', 'AveOccup']
X = df[selected_features]
y = target

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train the Linear Regression model
model = LinearRegression()
model.fit(X_train, y_train)

# Create a 'model' folder to save the trained model
os.makedirs('model', exist_ok=True)

# Save the trained model using pickle
with open('model/linear_regression_model.pkl', 'wb') as f:
	pickle.dump(model, f)

print("Model trained and saved successfully.")

.< b>linear_regression_model.pkl רותב model/ הייקיתב ותוא רמושו ירא

הרעה: דוע ףיסוהל תוסנל לוכי התא לבא .תונוכת לש הנטק הצובק-תתב קר ונשמתש

:ותוא רומשלו לדומה תא ןמאל ידכ טפירקסה תא לעפה

$ python3 model_training.py

:model/ תיירפסב pkl.-ה ץבוק תא אוצמל לגוסמ תויהל רומאו האבה העדוהה תא ל

Model trained and saved successfully.

FastAPI תייצקילפא תריצי

.FastAPI תועצמאב תויזחת תרשמה API רוצינ תעכ

.Docker Next תועצמאב FastAPI תייצקילפא תא ליכהל וננוצרב יכ תאז םישוע ונא .m

:אבה דוקה תא בותכ ,main.py

# app/main.py
from fastapi import FastAPI
from pydantic import BaseModel
import pickle
import os

# Define the input data schema using Pydantic
class InputData(BaseModel):
    MedInc: float
    AveRooms: float
    AveOccup: float

# Initialize FastAPI app
app = FastAPI(title="House Price Prediction API")

# Load the model during startup
model_path = os.path.join("model", "linear_regression_model.pkl")
with open(model_path, 'rb') as f:
    model = pickle.load(f)

@app.post("/predict")
def predict(data: InputData):
    # Prepare the data for prediction
    input_features = [[data.MedInc, data.AveRooms, data.AveOccup]]
    
    # Make prediction using the loaded model
    prediction = model.predict(input_features)
    
    # Return the prediction result
    return {"predicted_house_price": prediction[0]}

.יוזחה ריחמה תא ריזחמו ,תורידה יריחמ תא תוזחל ידכ ןמואמה לדומב שמתשמ אוה .(Med

Docker םע היצקילפאה לכימ

.requirements.txt ץבוקו Dockerfile רוצ ,טקיורפה לש שרושה תיירפסב

Dockerfile -ה תריצי

:Dockerfile רוצינ ואוב

# Use Python 3.11 as the base image
FROM python:3.11-slim

# Set the working directory inside the container
WORKDIR /code

# Copy the requirements file
COPY ./requirements.txt /code/requirements.txt

# Install the Python dependencies
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# Copy the app folder into the container
COPY ./app /code/app

# Copy the model directory (with the saved model file) into the container
COPY ./model /code/model

# Expose port 80 for FastAPI
EXPOSE 80

# Command to run the FastAPI app with Uvicorn
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

.ןומטמב הרימש אלל Python לש םישורדה תולתה תא ןיקתמו ,רנייטנוקה ךותל require

.הליכמ הביבסב FastAPI תייצקילפא תסירפל הליעי וז הרדגה .80 האיציב שיגנל API-ה ת

requirements.txt ץבוק תריצי

:תולתה לכ תא טרפמה requirements.txt ץבוק רוצ

fastapi
uvicorn
scikit-learn
pandas

Docker תנומת תיינב

.רנייטנוקה תא ליעפנו Docker תנומת הנבנ ואוב ,םינכומ FastAPI תייצקילפאו Dockerf

:docker build לש האבה הדוקפה תלעפה ידי לע Docker תנומת תא הנב

$ docker build -t house-price-prediction-api .

:Docker לכימ תא לעפה ןכמ רחאל

$ docker run -d -p 80:80 house-price-prediction-api

.http://127.0.0.1:80 תבותכב שיגנו תעכ לועפל רומא ךלש API-ה

:המגודל השקב הנה .POST תשקב תחילש ידי לע /predict הצקה תדוקנ תא קודבל י

curl -X 'POST' \
  'http://127.0.0.1:80/predict' \
  -H 'Content-Type: application/json' \
  -d '{
  "MedInc": 3.5,
  "AveRooms": 5.0,
  "AveOccup": 2.0
}'

:ךכ ,יוזחה הרידה ריחמ םע הבוגת ריזחהל רומא הז

{
  "predicted_house_price": 2.3248705765077062
}

Docker Hub -ל Docker תנומת לש הפיחדו גוית

.ןנע תומרופטלפל רתוי הלק הסירפו ףותישל Docker Hub -ל ותוא ףוחדל לוכי התא תעכ .

:Docker Hub -ל סנכיה ,תישאר

$ docker login

.םירושיאה תא ןיזהל שקבתת

:רקודה תנומת תא וגיית

$ docker tag house-price-prediction-api your_username/house-price-prediction-api:v1

.Docker Hub -ב ךלש שמתשמה םשב your_username תא ףלחה

הרעה: ל תנכדועמה הנומתה תא ףוחדלו ,שדח גת םע הנומתה תא שדחמ תונבל לוכי

:Docker Hub -ל הנומתה תא ףחד

$ docker push your_username/house-price-prediction-api:v1

:ךכ הנומתה תא ליעפהלו ךושמל תעכ םילוכי םירחא םיחתפמ

$ docker pull your_username/house-price-prediction-api:v1
$ docker run -d -p 80:80 your_username/house-price-prediction-api:v1

.לכימה תא ליעפהלו הנומתה תא ךושמל תעכ לוכי ךלש Docker Hub רגאמל השיג ול שיש ימ

םיאבה םיבלשהו םוכיס

:הז ךירדמב ונישעש המ לש הריהמ הריקס הנה

  • scikit-learn תועצמאב הנוכמ תדימל לדומ ןומיא
  • תויזחת תרשל FastAPI תייצקילפא ונב
  • Docker םע לכימל היצקילפאה תא סנכה

.ןנעל הזה ליכמה םושייה תא סורפל אוה אבה ינויגהה בלשה .רתוי הלק הצפהל Docker Hu

.ןנעב הנוכמ תדימל לש םילדומ תסירפ לע הכרדה הצור התא םא ונל רפס .רוציי תביבסב A

!המיענ הסירפ

תפסונ האירקו תוינפה

  • תוקד ךות Python םע API יקשממ תיינב :FastAPI ךירדמ
  • םיטושפ םיבלש 5-ב Docker םע Python ימושיי לכימ
  • FastAPI תולוכמב