- Корреляция Пирсона — это метод выбора признаков.
- Он показывает направление и силу между зависимыми и независимыми переменными.
- Этот метод лучше всего подходит, когда существует линейная связь между зависимым и независимым.
- Его значение находится в диапазоне от -1 до 1.
- -1 означает, что существует сильная связь между зависимым и независимым.
- 0 означает, что между зависимым и независимым вообще нет связи.
- 1 означает, что существует сильная положительная связь между зависимым и независимым.
- когда значение корреляции приближается к 0, связь становится слабее.
Математика корреляции Пирсона
- Корреляция Пирсона — это отношение ковариации между x и y к произведению стандартного отклонения x и y.
- во-первых, нам нужно понять, что такое дисперсия, стандартное отклонение и ковариация.
- ниже приведена формула корреляции Пирсона.
1) Дисперсия:
- дисперсия измеряет отклонение данных от их среднего значения.
2) Стандартное отклонение:
- Стандартное отклонение – это квадратный корень из дисперсии.
3) Ковариация:
- Ковариация измеряет линейную зависимость между переменными.
- Приступим к реализации корреляции Пирсона.
# importing libraries import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline
- Ниже приведены 3 способа определения взаимосвязи между зависимой и независимой переменными.
1) если X возрастает и у тоже увеличивается:
- мы можем сказать, что существует сильная положительная связь между зависимыми и независимыми переменными.
2) если X возрастает, а y постоянно:
- мы можем сказать, что между зависимыми и независимыми переменными вообще отсутствует связь.
3) если X убывает, а y возрастает:
- мы можем сказать, что существует сильная связь между зависимыми и независимыми переменными.
Создание данных
- мы создаем некоторые необработанные данные, чтобы понять связь между ними.
- мы также собираемся построить линейные графики для лучшего понимания.
# X is increasing and y is also increasing X1 = [1,2,3,4,5] y1 = [1,2,3,4,5] # if X is increasing and y is constant X2 = [1,2,3,4,5] y2 = [1,1,1,1,1] # if X is decreasing and y is increasing X3 = [5,4,3,2,1] y3 = [1,2,3,4,5]
Теперь визуализируйте приведенные выше данные.
# plot for X is increasing and y is also increasing plt.figure(figsize=(15,5)) plt.subplot(1,3,1) plt.plot(X1, y1) plt.title('Fig: 1.1 \nincreasing X, y increasing ') plt.xlabel('+ ve correlation') plt.ylabel('increasing value of y') # plot for if X is increasing and y is constant plt.subplot(1,3,2) plt.plot(X2, y2) plt.title('Fig: 1.2 \nincreasing X, y constant ') plt.xlabel('no correlation') plt.ylabel('constant value of y') # plot for if X is decreasing and y is increasing plt.subplot(1,3,3) plt.plot(X3, y3) plt.title('Fig: 1.3, \ndecreasing X, y increasing ') plt.xlabel('-ve correlation') plt.ylabel('increasing value of y') plt.show()
- На рис. 1.1 мы можем наблюдать, что если значение X увеличивается, значение y также увеличивается, это означает, что между ними существует сильная положительная корреляция.
- На рис. 1.2 мы можем наблюдать, что если значение X увеличивается, а значение y остается постоянным, это означает, что корреляции нет вообще.
- На рис. 1.3 мы можем наблюдать, что если значение X уменьшается, значение y увеличивается, это означает, что существует сильная корреляция между этими двумя значениями.
Теперь пришло время применить корреляцию Пирсона.
# import dataset # here we are using housing dataset. train_data = pd.read_csv('/content/drive/MyDrive/My Datasets/House Price/train.csv') train_data.shape output: (1460, 81)
- Здесь мы не занимаемся какой-либо разработкой признаков, поэтому мы выбираем только целочисленные столбцы и отбрасываем строки с нулевыми значениями для применения корреляции Пирсона.
# getting only integer columns. train_data.drop(train_data.select_dtypes(include='object').columns, inplace=True, axis=1) # dropping columns which have missing value percentage greater than 60 train_data.drop(train_data.columns[train_data.isnull().mean()>0.60], inplace=True, axis=1) train_data.shape output: (1460, 38)
- Эта тепловая карта показывает, сколько нулевых значений присутствует в наборе данных.
plt.figure(figsize=(20, 7)) sns.heatmap(train_data.isnull(), yticklabels=False, cbar=False) plt.show()
# dropping rows which have missing values. train_data.dropna(inplace=True, axis=0) train_data.shape output: (1121, 38) plt.figure(figsize=(20, 7)) sns.heatmap(train_data.isnull(), yticklabels=False, cbar=False) plt.show()
- мы очистили наш набор данных до сих пор. Пришло время использовать корреляцию Пирсона.
from sklearn.feature_selection import f_regression, SelectKBest # f_regression method used for pearson's correlation. # SelectKBest method used to select top k best features.
- Присвоение зависимых переменных переменной X и.
- Присвоение независимой переменной переменной y.
X = train_data.drop(['SalePrice'], axis=1) y = train_data['SalePrice']
- здесь мы создаем объект класса SelectKBest с функцией оценки f_regression со значением k 10.
skb = SelectKBest(score_func=f_regression, k=10)
- Теперь пришло время подогнать нашу модель, используя переменные X и y.
# fit meathod used to fit model on dataset using our score function. skb.fit(X, y)
- приведенный выше код возвращает результат ниже.
SelectKBest(k=10, score_func=<function f_regression at 0x7fded4e704d0>)
- Метод get_support() возвращает логический список значений True и False. мы можем использовать этот список, чтобы получить наши столбцы из набора данных. когда True он рассматривает столбец, в противном случае он не рассматривает возвращаемый столбец.
# get_support() returns the boolean list of columns . col = skb.get_support() col output: array([False, False, False, False, True, False, True, True, False, False, False, False, True, True, False, False, True, False, False, True, False, False, False, True, False, False, True, True, False, False, False, False, False, False, False, False, False])
- get_support(indices=True) возвращает список целых чисел, обозначающих номер (позицию) определенного столбца.
# get_support(indices=True) returns the list of k columns indices which have high pearson's correlations. col = skb.get_support(indices=True) col output: array([ 4, 6, 7, 12, 13, 16, 19, 23, 26, 27]) # scores_ returns correlation values of every feature. skb.scores_ output: array([2.49023403e+00, 8.73950826e+00, 1.50458329e+02, 1.10639690e+02, 1.96036658e+03, 1.75866077e+01, 4.26662160e+02, 4.17465247e+02, 3.51021787e+02, 2.01096191e+02, 8.79325850e-01, 5.32479989e+01, 6.82869769e+02, 6.56137887e+02, 1.16337572e+02, 2.45763523e-03, 1.10672093e+03, 6.64373624e+01, 1.49381397e+00, 5.29173583e+02, 8.69809362e+01, 3.20295557e+01, 2.25333340e+01, 4.77935018e+02, 3.03445055e+02, 3.82561158e+02, 8.05838393e+02, 6.96288859e+02, 1.43226582e+02, 1.49551920e+02, 2.74886917e+01, 1.06092031e+00, 1.38136215e+01, 9.65457023e+00, 1.45543888e+00, 2.98365208e+00, 1.57654584e-01]) # this is our final dataset after using pearson's correlation X.iloc[:, col]
- Вот мой полный блокнот по корреляции Пирсона. Нажмите здесь
Обзор:
- мы узнали, как использовать корреляцию Пирсона, а также как реализовать ее с помощью библиотеки Sklearn.
- мы также видели, как использовать метод SelectKBest для выбора функции K из набора данных.