19 KiB
19 KiB
Вот как можно переделать текст под ваш датасет, учитывая его особенности:
Регрессия
- Прогнозирование цены бриллианта: Цель: Используя такие параметры, как караты, огранка, цвет, чистота, глубина, таблица, размеры (x, y, z), можно предсказать цену бриллиантов.
Классификация
- Распределение бриллиантов по категориям чистоты: Цель: Распределить бриллианты по различным категориям чистоты (например, IF, VVS1, VVS2 и т.д.) с использованием данных о каратах, огранке, цвете, глубине, таблице и размерах.
In [1]:
import pandas as pd
from sklearn import set_config
set_config(transform_output="pandas")
random_state = 9
file_path = 'data/Diamonds Prices2022.csv'
df = pd.read_csv(file_path)
# Функция для преобразования типа огранки (cut)
def Cut_Type(value):
if value == "Fair":
return 0
elif value == "Good":
return 1
elif value == "Very Good":
return 2
elif value == "Premium":
return 3
elif value == "Ideal":
return 4
df['Cut_Type'] = df['cut'].map(Cut_Type)
df
Out[1]:
In [2]:
from sklearn.utils import resample
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn import metrics
from imblearn.over_sampling import RandomOverSampler
from imblearn.under_sampling import RandomUnderSampler
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.metrics import ConfusionMatrixDisplay
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, RandomForestClassifier, GradientBoostingClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import SGDClassifier, SGDRegressor
from sklearn.metrics import (
precision_score, recall_score, accuracy_score, roc_auc_score, f1_score,
matthews_corrcoef, cohen_kappa_score, confusion_matrix
)
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
import numpy as np
import featuretools as ft
from sklearn.metrics import accuracy_score, classification_report
# Загрузка данных
df = pd.read_csv("data/Diamonds Prices2022.csv")
# Определение целевых переменных
# Для задачи классификации я буду использовать 'cut' как целевую переменную
X = df.drop('cut', axis=1) # Убираем target переменную
y_class = df['cut'] # Задача классификации (например, классификация по типу огранки)
y_reg = df['price'] # Задача регрессии (например, предсказание цены бриллианта)
# Преобразование категориальных переменных
categorical_features = ['color', 'clarity']
numerical_features = ['carat', 'depth', 'table', 'x', 'y', 'z']
# Создание ColumnTransformer с обработкой неизвестных категорий
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), numerical_features),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)]) # Используем handle_unknown='ignore'
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_class_train, y_class_test, y_reg_train, y_reg_test = train_test_split(X, y_class, y_reg, test_size=0.2, random_state=42)
def estimate_bias_variance(model, X, y):
predictions = np.array([model.fit(X, y).predict(X) for _ in range(1000)])
bias = np.mean((y - np.mean(predictions, axis=0)) ** 2)
variance = np.mean(np.var(predictions, axis=0))
return bias, variance
# Просмотр обучающих и тестовых данных
print("X_train", X_train.head())
print("y_class_train", y_class_train.head())
print("X_test", X_test.head())
print("y_class_test", y_class_test.head())
In [3]:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
# Загрузка данных
file_path = 'data/Diamonds Prices2022.csv'
df = pd.read_csv(file_path)
# Очистка столбцов от пробелов
df.columns = df.columns.str.strip()
# Проверка столбцов
print(df.columns)
# Определение признаков и целевой переменной
# Задача классификации: будем предсказывать 'cut' (тип огранки)
X = df.drop('cut', axis=1) # Убираем целевую переменную
y_class = df['cut'] # Целевая переменная для классификации
# Преобразование категориальных признаков в числовые
X = pd.get_dummies(X, drop_first=True) # Преобразуем категориальные признаки в числовые, исключая первую категорию
# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y_class, test_size=0.2, random_state=42)
# Масштабирование данных
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Обучение модели
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train_scaled, y_train)
# Прогнозирование
y_pred = model.predict(X_test_scaled)
# Оценка модели
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))