Вопрос или проблема
Я новичок в машинном обучении и в данный момент занимаюсь практикой, работая с наборами данных, которые нахожу на Kaggle. В настоящее время я пытаюсь предсказать цену Audi на основе модели, пробега и года выпуска, используя немного изменённую версию этого набора (я использую только столбцы: модель, пробег, цена и год).
У меня написан следующий код, использующий линейную регрессию.
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
df = pd.read_csv('audi.csv', sep=";")
cars=pd.get_dummies(df['model'],prefix='car')
new_df=pd.concat([df,cars],axis="columns")
new_df=new_df.drop(['model'],axis="columns")
x_data=new_df.drop(['price'],axis="columns")
y_data=new_df['price']
model=LinearRegression()
model.fit(x_data,y_data)
Это даёт мне скромный model.score
0.8290666609212749.
Чтобы протестировать индивидуальный автомобиль, который я нахожу на одном из множества сайтов подержанных автомобилей, я делаю следующее:
#Audi A3, 42100 пробег, 2016 год выпуска
model.predict([[42100,2016,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
Это работает, но, как вы можете видеть, это очень неудобно из-за всех фиктивных переменных. Есть ли способ упростить это?
В качестве альтернативы pd.dummies() вы можете использовать sklearn.preprocessing.OneHotEncoder(). Преимущество здесь в том, что после создания объекта кодировщика вы можете повторно использовать его для преобразования точек данных в формат one hot. Вы можете использовать OneHotEncoder(categories), чтобы вручную назначить категории для объекта кодировщика, или вы можете использовать OneHotEncoder.fit(), чтобы извлечь категории из конкретного признака. Затем вы можете использовать OneHotEncoder.transform(feature), чтобы преобразовать его в формат one hot. pd.dummies() не предоставляет возможность повторного использования, поэтому sklearn.OneHotEncoder() упрощает задачу.
Ответ или решение
Как предсказать пользовательское значение после использования линейной регрессии?
Предсказание цен на автомобили, учитывая такие параметры, как модель, пробег и год выпуска, с использованием линейной регрессии является отличным способом начать свое знакомство с машинным обучением. В процессе работы с данными, особенно при использовании таких популярных библиотек, как pandas
и scikit-learn
, важно не только получить точный результат, но и упростить процесс подготовки данных для предсказаний.
1. Подготовка данных
Ваш код уже корректно загружает данные и готовит их к обучению модели линейной регрессии. Однако для упрощения последующего предсказания есть несколько моментов, которые стоит учитывать.
Вместо использования pd.get_dummies()
, вы можете воспользоваться классом OneHotEncoder
из библиотеки sklearn
. Этот метод не только конвертирует категориальные переменные в фиктивные (двоичные) переменные, но также предоставляет возможность повторного использования кодировщика для новых данных.
Пример кода с использованием OneHotEncoder
:
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
# Определяем признаки
X = df[['mileage', 'year', 'model']]
y = df['price']
# Создаем предобработчик данных
preprocessor = ColumnTransformer(
transformers=[
('model', OneHotEncoder(), ['model']), # Преобразование столбца 'model'
],
remainder='passthrough' # Оставляем остальные столбцы без изменений
)
# Создаем полную модель в рамках пайплайна
model = Pipeline(steps=[
('preprocessor', preprocessor),
('regressor', LinearRegression())
])
# Обучаем модель
model.fit(X, y)
2. Прогнозирование пользовательских значений
После обучения модели прогнозирование становится значительно проще и интуитивнее. Вам не нужно вручную компилировать массив значений с фиктивными переменными. Вместо этого вы просто передаете набор данных в модель:
# Прогнозирование для кастомизированного автомобиля
input_data = pd.DataFrame({
'mileage': [42100],
'year': [2016],
'model': ['Audi A3']
})
predicted_price = model.predict(input_data)
print(f'Предсказанная цена: {predicted_price[0]}')
3. анализ результатов
Результат прогноза можно проверить и проанализировать, что в свою очередь позволяет вам вносить изменения в модель или в предобработку данных для улучшения точности. Ваша метрика R² (model.score) 0.829 говорит о том, что модель объясняет 82.9% вариации цены авто, что неплохо, но возможно, вы сможете улучшить эту метрику, например, добавив дополнительные признаки или обработав их.
Заключение
Использование OneHotEncoder
и создание пайплайна упрощает не только процесс предсказания, но и делает ваш код более понятным и управляемым. Это особенно полезно, если вы планируете повторно использовать тот же код с другими наборами данных или при_testировании новых автомобилей. Отладка и улучшение моделей машинного обучения – это итеративный процесс, и использование современных библиотек и методик делает его гораздо более управляемым.