Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Регрессия, пайтон, прошу помощь

1234567891011121314151617181920212223
 import pandas as pd 
import numpy as np 
df = pd.read_csv("/kaggle/input/linear-regression-academic-mehmat/diamonds_test.csv") 
df_prices = pd.read_csv('/kaggle/input/linear-regression-academic-mehmat/sample_submission.csv') 
x = df[['carat','depth','table','x','y','z']] 
y = df_prices['price'] 
 
from sklearn.model_selection import train_test_split 
X_train, X_test, Y_train, Y_test = train_test_split(x,y, 
                                                    test_size=0.3, 
                                                    random_state=42) 
 
from sklearn.linear_model import LinearRegression 
model = LinearRegression() 
model.fit(X_train, Y_train) 
Y_pred = model.predict(X_test) 
print(Y_pred[:10]) 
 
from sklearn.metrics import mean_squared_error 
print('RMSE', mean_squared_error(Y_test, Y_pred)) 
 
from sklearn.metrics import r2_score 
print('R2', np.round(r2_score(Y_test, Y_pred))) 

Кто разбирается сразу понял, что пытаюсь обучить машину прогнозировать цену бриллиантов. Что-то да выдает и прогнозирует, но когда пытался найти среднеквадратичное отклонение и коэффициент детерминации, то выдает уж слишком грустные значения: 1136193 и 0. Такое ощущение, будто бы она ошибается. И ещё, обычно я писал root_mean_squared_error, но в Kaggle такая запись выдает ошибку.

Скинул бы csv файлики, но не умею(

По дате
По рейтингу
Аватар пользователя
Новичок
8мес

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

Проблема с данными:

Проверьте, правильно ли загружены данные. Возможно, в df_prices содержатся не те цены, что ожидаются, или данные имеют пропуски.
Проверьте на наличие пропущенных значений в x с помощью df.isnull().sum().
Убедитесь, что в df_prices индексы совпадают с df.
Масштабирование данных:

Возможно, ваши признаки имеют разные масштабы. Попробуйте стандартизировать или нормализовать данные с помощью StandardScaler или MinMaxScaler из sklearn.preprocessing.
python
Копировать код
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit _transform(X_train)
X_test_scaled = scaler.transform(X_test)

model.fit (X_train_scaled, Y_train)
Y_pred = model.predict(X_test_scaled)
Ошибка в метриках:

Вы правильно используете mean_squared_error, но RMSE — это корень из MSE. Вы можете вычислить его так:
python
Копировать код
rmse = np.sqrt(mean_squared_error(Y_test, Y_pred))
print('RMSE:', rmse)
Проверка модели:

Проверьте, как выглядит ваш набор данных. Возможно, стоит использовать другие методы оценки, например, кросс-валидацию.
Посмотрите на распределение предсказанных значений и фактических цен, возможно, они сильно различаются.
Коэффициент детерминации (R²):

R², равный 0, означает, что модель не объясняет вариацию в данных. Это может быть связано с неадекватной моделью или плохим выбором признаков. Рассмотрите возможность использования других алгоритмов (например, деревья решений, случайный лес).