продолжить с Часть ПЕРВАЯ

Шаг 4: Обучение модели

После того, как вы выбрали свой алгоритм и подготовили свои данные, вы можете обучить свою модель, используя следующий код:

import pandas as pd
import sklearn
from sklearn.svm import SVR

def train_model() -> SVR:
    """Trains a model on the data in the 'clean_house_prices.csv' file.
        
    Returns:
        A trained SVR model.
    """
    # Load the training data into a pandas dataframe
    df = pd.read_csv('clean_house_prices.csv')

    # Split the data into a training set and a test set
    X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(df.drop('price', axis=1), df['price'], test_size=0.2)

    # Create an SVR model
    model = SVR()

    # Train the model on the training set
    model.fit(X_train, y_train)

    # Print the model's accuracy on the test set
    print(f'Model accuracy on test set: {model.score(X_test, y_test)}')
    
    return model

Затем вы можете обучить модель, вызвав функцию train_model:

model = train_model()

Шаг 5: Оценка модели

Чтобы оценить производительность модели, вы можете использовать тестовый набор, набор данных, зарезервированный для оценки модели и не используемый во время обучения. В следующем коде показано, как оценить модель с помощью набора тестов:

import pandas as pd
import sklearn

def evaluate_model(model: SVR) -> float:
    """Evaluates a model on the data in the 'clean_house_prices_test.csv' file.
    
    Args:
        model: The model to evaluate.
        
    Returns:
        The mean squared error between the predicted and actual values.
    """
    # Load the test data into a pandas dataframe
    df_test = pd.read_csv('clean_house_prices_test.csv')

    # Extract the features and target values from the test data
    X_test = df_test.drop('price', axis=1)
    y_test = df_test['price']

    # Make predictions on the test set using the model
    y_pred = model.predict(X_test)

    # Calculate the mean squared error between the predicted and actual values
    mse = sklearn.metrics.mean_squared_error(y_test, y_pred)

    # Print the mean squared error
    print(f'Mean squared error: {mse}')
    
    return mse

Затем вы можете оценить модель, вызвав функцию evaluate_model:

mse = evaluate_model(model)

Шаг 6: Улучшение модели

Если производительность модели неудовлетворительна, вы можете попытаться улучшить ее, изменив алгоритм или изменив параметры алгоритма. Вы также можете использовать больше данных для обучения или по-другому предварительно обработать данные. Например, вы можете попробовать использовать другой алгоритм регрессии, такой как случайный лес или алгоритм повышения. Вы также можете попробовать настроить параметры модели SVR, используя перекрестную проверку и поиск по сетке.

Перекрестная проверка — это метод оценки производительности модели на различных подмножествах данных и усреднения результатов. Это помогает уменьшить влияние случайности в данных и улучшить способность модели к обобщению.

Поиск по сетке — это метод поиска в наборе возможных значений параметров и нахождения наилучшей комбинации параметров. Это можно сделать с помощью функции GridSearchCV из scikit-learn.

Вот пример того, как использовать перекрестную проверку и поиск по сетке для настройки параметров модели SVR:

import sklearn
from sklearn.model_selection import GridSearchCV

def improve_model(model: SVR, data: pd.DataFrame, target: pd.Series) -> SVR:
    """Improves a model using cross-validation and grid search.
    
    Args:
        model: The model to improve.
        data: The data to use for training and validation.
        target: The target values for the data.
        
    Returns:
        An improved version of the input model.
    """
    # Create a list of parameter values to try
    param_grid = [
        {'C': [1, 10, 100, 1000], 'kernel': ['linear']},
        {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
    ]

    # Create a grid search object with a 5-fold cross-validation
    grid_search = GridSearchCV(model, param_grid, cv=5)

    # Fit the grid search object to the data
    grid_search.fit(data, target)

    # Print the best parameters and best score
    print(f'Best parameters: {grid_search.best_params_}')
    print(f'Best score: {grid_search.best_score_}')
    
    return grid_search.best_estimator_

Шаг 7: Реализация модели

После успешного обучения и оценки модели ее можно внедрить в приложение или использовать для прогнозирования новых данных.

Чтобы использовать модель для прогнозирования, вы можете просто передать ей новые данные и вызвать метод predict. Например, чтобы спрогнозировать цену дома с определенными характеристиками:

import numpy as np

# Create a numpy array of shape (1, n) containing the features of the house
X_new = np.array([[3, 1000, 50, 1]])

# Make a prediction using the model
prediction = model.predict(X_new)

# Print the prediction
print(f'Predicted price: {prediction[0]}')

Вы также можете использовать модель в приложении, сохранив ее в файл и загрузив при необходимости. Для сохранения модели можно использовать библиотеку pickle

import pickle

# Save the model to a file
with open('model.pkl', 'wb') as f:
    pickle.dump(model, f)

Чтобы загрузить модель из файла, вы можете использовать следующий код:

# Load the model from a file
with open('model.pkl', 'rb') as f:
    model = pickle.load(f)

Важно отметить, что модель сможет делать прогнозы для новых данных только в том случае, если она имеет те же функции, что и данные, на которых она обучалась. Если вы хотите использовать модель для прогнозирования данных с различными функциями, вам потребуется изменить модель или переобучить ее с использованием новых данных.

Выводы

В заключение мы обсудили процесс обучения, оценки и реализации модели машинного обучения с использованием Python. Мы собрали данные с веб-сайта, очистили и подготовили их для обучения модели, выбрали алгоритм, обучили модель, оценили ее производительность и улучшили ее с помощью перекрестной проверки и поиска по сетке. Наконец, мы реализовали модель в приложении и использовали ее для прогнозирования новых данных.

Есть много других аспектов машинного обучения, которые мы не рассмотрели в этом проекте, таких как визуализация данных, разработка функций и метрики оценки модели. В будущих статьях мы углубимся в эти темы и рассмотрим другие методы и инструменты машинного обучения.

Мы также обсудим, следуя списку в статье «Навыки для успеха: 6 навыков, которыми должен обладать ИИ-инженер», мы начнем говорить о машинном обучении, научимся использовать этот удивительный инструмент.