Поиск мультиколлинеарности между атрибутами с использованием коэффициента инфляции дисперсииPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Поиск мультиколлинеарности между атрибутами с использованием коэффициента инфляции дисперсии

Сообщение Гость »


Я пытаюсь понять мультиколлинеарность, которая может существовать между различными атрибутами/переменными в наборе данных, обычно для задачи регрессии с использованием VIF. Для этой цели я использую набор данных Boston Housing. Обнаружив коррелирующие функции, я пытаюсь удалить их и посмотреть, как это повлияет на производительность модели линейной регрессии.

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

импортировать pandas как pd, numpy как np импортировать statsmodels.api как sm из statsmodels.stats.outliers_influence импортировать variance_inflation_factor из sklearn.model_selection импорт train_test_split из sklearn.linear_model импорт LinearReгрессия из sklearn.metrics импортируйте среднюю_абсолютную_ошибку, среднюю_квадратную_ошибку, r2_score импортировать matplotlib.pyplot как plt, seaborn как sns ''' Проблема регрессии- Набор данных о жилье в Бостоне. Целевой атрибут — «medv». Подробную информацию о наборе данных см. https://www.cs.toronto.edu/~delve/data/ ... etail.html ''' # Чтение файла данных CSV- boston_data = pd.read_csv("Boston_Housing.csv") # Получить размерность набора данных print("\nРазмер/Форма набора данных- {0}\n".format(boston_data.shape)) # Размер/форма набора данных – (333, 15) # Получить имена атрибутов набора данных print("\nИмена атрибутов набора данных:\n{0}\n\n".format(boston_data.columns.tolist())) ''' Имена атрибутов набора данных: ['ИД', 'крим', 'зн', 'инд', 'час', 'нокс', 'рм', 'возраст', 'дис', 'рад', 'налог', 'птратио', 'черный', 'лстат', 'медв'] ''' # Удаление атрибута «ID» из набора данных. boston_data.drop('ID', ось = 1, inplace=True) print("\nРазмер/Форма набора данных после удаления 'ID' = {0}\n".forma(boston_data.shape)) # Размер/форма набора данных после удаления 'ID' = (333, 14) # Проверьте пропущенные значения- print("\nЕсть ли в наборе данных пропущенные значения? {0}\n".format(boston_data.isnull().values.any())) # Есть ли в наборе данных пропущенные значения? ЛОЖЬ # Визуализация распределения набора данных с помощью коробчатых диаграмм sns.boxplot(данные=boston_data) plt.xticks(поворот = 20) plt.title("Распределение набора данных по жилищному строительству Бостона с использованием коробчатых диаграмм") plt.show() # Создать коррелограмму- # Вычислить корреляционную матрицу набора данных boston_data_corr = boston_data.corr() sns.heatmap(boston_data_corr) plt.xticks(поворот = 20) plt.title("Коррелограмма набора данных по жилищному строительству Бостона") plt.show() # Разделите набор данных на объекты (X) и метку (y) – X = boston_data.drop('medv', ось = 1) y = boston_data['medv'] # Создайте наборы для обучения и тестирования. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0,3) print("\nРазмеры обучающего и тестового наборов:") print("X_train = {0}, y_train = {1}, X_test = {2} и y_test = {3}\n\n".format(X_train.shape, y_train.shape, X_test.shape, y_test.shape) ) # Размеры обучающих и тестовых наборов: # X_train = (233, 13), y_train = (233,), X_test = (100, 13) и y_test = (100,) # Обнаружение мультиколлинеарности с помощью VIF- vif = [variance_inflation_factor(X.values, i) для i в диапазоне(X.shape[1])] # Создайте серию pandas, чтобы получить метку VIF для каждого атрибута. vif_info = pd.Series(vif, index=X.columns) print("\nVIF, рассчитанный для каждого атрибута в наборе данных:\n{0}\n".format(vif_info.sort_values(ascending = True))) ''' VIF, рассчитанный для каждого атрибута в наборе данных: час 1.131439 зн 2.554112 криминал 2.649245 lstat 11.341896 инд 13.801806 рад 14,649941 дис 15.707447 возраст 21,929478 черный 22.853979 налог 56.334001 нокс 75.640420 рм 83.056962 pтратио 86.123039 тип d: float64 ''' # Удаление коллинеарных атрибутов/переменных- ''' Мы создаем функцию для удаления коллинеарных переменных. Мы выбираем порог 5, что означает, что VIF больше 5 для определенного переменная/атрибут, то эта переменная будет удалена. ''' # Линейная регрессия- # Сначала обучите линейную регрессию, используя все атрибуты, чтобы получить базовую оценку lr_model = ЛинейнаяРегрессия() lr_model.fit(X_train, y_train) y_pred = lr_model.predict(X_test) mse = mean_squared_error(y_test, y_pred) mae =mean_absolute_error(y_test, y_pred) r2s = r2_score(y_test, y_pred) print("\nМетрики модели линейной регрессии:") print("MSE = {0:.4f}, MAE = {1:.4f} и R2-Score = {2:.4f}\n\n".format(mse, mae, r2s)) # Показатели модели линейной регрессии: # MSE = 33,7151, MAE = 3,8272 и показатель R2 = 0,6831. # Обучение линейной регрессии с использованием атрибутов, VIF
Почему тогда метод VIF не работает, принимая 3 атрибута с VIF
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Python (применить таблицу инфляции к таблице продаж) [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous
  • Сходство предложения с использованием коэффициента Jaccard в файле Excel
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Дисперсия Уэлфорда отличается от дисперсии Numpy
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Эффективный алгоритм онлайн-дисперсии по пакетам изображений
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • GARCH с экзогенным регрессором дисперсии в Python?
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»