• Корреляция Пирсона — это метод выбора признаков.
  • Он показывает направление и силу между зависимыми и независимыми переменными.
  • Этот метод лучше всего подходит, когда существует линейная связь между зависимым и независимым.
  • Его значение находится в диапазоне от -1 до 1.
  1. -1 означает, что существует сильная связь между зависимым и независимым.
  2. 0 означает, что между зависимым и независимым вообще нет связи.
  3. 1 означает, что существует сильная положительная связь между зависимым и независимым.
  4. когда значение корреляции приближается к 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 возрастает:

  • мы можем сказать, что существует сильная связь между зависимыми и независимыми переменными.

Создание данных

  1. мы создаем некоторые необработанные данные, чтобы понять связь между ними.
  2. мы также собираемся построить линейные графики для лучшего понимания.
# 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 из набора данных.