Makine Öğrenmesine Çok Değişkenli İstatistiksel Yaklaşımlar: Temel Bileşenler Analizi

TEMEL BİLEŞENLER ANALİZİ PYTHON UYGULAMASI

Çalışmada “Human Activity Recognition” veri seti kullanılmıştır. 30 gönüllü denek ile oluşturulan bu veri setinde, gönüllülere akıllı telefonlar üzerlerindeyken yürüme, merdiven çıkma, merdiven inme, oturma, kalkma ve uzanma hareketleri yaptırılmıştır. Veri setinin amacı elde edilen verilerle insan davranışlarının tahminlenmesidir.

import pandas as pd
import os
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import Image
from warnings import filterwarnings
df = pd.read_csv('Simplified_Human_Activity_Recognition.csv')
df.shape
(3609, 562)

Datada 3.609 satır ve 562 sütun bulunmaktadır.

y= df['activity']
X = df.iloc[:,1:]
X.head()
correlation_exp=X[['angle.X.gravityMean','angle.Y.gravityMean','tBodyAcc.std.X','tBodyAcc.std.Y',
                   'tBodyAcc.mad.X','tBodyAcc.std.X','tBodyAcc.min.Y','tBodyAcc.std.Y']]

# Korelasyon Matrisi
corr = correlation_exp.corr()

mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True

f, ax = plt.subplots(figsize=(10, 8))

cmap = sns.diverging_palette(220, 10, as_cmap=True)

sns.heatmap(corr, mask=mask, cmap=cmap, vmax=1, center=0,annot=True,
            square=True, linewidths=.5, fmt= '.1f', cbar_kws={"shrink": .5})
plt.show()
Değişkenlerin Korelasyon Matrisi

561 değişkenin korelasyon matrisinin incelemesinin zor olmasından dolayı örnek değişkenlerin korelasyon matrisi eklenmiştir. Görüldüğü gibi veri setinde çok yüksek korelasyona sahip değişkenler bulunmaktadır.

# Veriler 0 ile 1 aralığında ölçeklendirilmiştir
from sklearn.preprocessing import MinMaxScaler
features = X.columns.values
scaler = MinMaxScaler(feature_range = (0,1))
scaler.fit(X)
X = pd.DataFrame(scaler.transform(X))
X.columns = features

TEMEL BİLEŞENLERİN HESAPLANMASI

# Herbir Değişken için Ortalama Vektör Hesaplanmıştır
mean_vec = np.mean(X, axis=0)

#Kovaryans Matrisi
cov_mat = (X - mean_vec).T.dot((X - mean_vec)) / (X.shape[0]-1)

#Özvektörler ve Özdeğerlerin Hesaplanmıştır
eig_vals, eig_vecs = np.linalg.eig(cov_mat)

# Özdeğer ve özvektör başlıklarının tuple haline getirilmiştir
eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:,i]) for i in range(len(eig_vals))]

# Tuple'lar sıralanmıştır
eig_pairs.sort(key=lambda x: x[0], reverse=True)

#Açıklanan Varyanslar ve Kümüle Varyans Hesaplanmıştır
tot = sum(eig_vals)
var_exp = [(i / tot)*100 for i in sorted(eig_vals, reverse=True)]
cum_var_exp = np.cumsum(var_exp)

#Bileşenlerin Açıkladıkları Varyanslar(ilk 10)
var_exp[:10]
#Kümülatif Açıklanan Varyans(ilk 10)
cum_var_exp[:10]
plt.figure(figsize=(18, 10))
plt.bar(range(1,11), var_exp[:10], label='Bileşenin Açıkladığı Varyans', color='lightskyblue')
plt.step(range(1,11), cum_var_exp[:10], label='Kümülatf Açıklanan Varyans',color='red')
plt.ylabel('Açıklanan Varyans')
plt.xlabel('Temel Bileşenler')
plt.show()
Bileşenlerin Açıkladıkları Varyanslar

İlk bileşen toplam varyansın yarısından fazlasını açıklamaktadır. Daha fazla açıklayıcılığın olmasını istenebilir. Örneğin %75 açıklanan varyans ilk 5 değişken ile elde edilebilmektedir.


Kısa Yol

Önceki kodlarda analizin daha açıklayıcı olabilmesi adına ortalama vektör, kovaryans matrisi, özvektör ve özdeğerler hesaplanarak bileşenler elde edilmişti. Bundan sonraki bölümde ise analizlerde kullanmaya daha elverişli olan sklearn kütüphanesi kullanılacaktır.

from sklearn.decomposition import PCA

pca = PCA(n_components=561)  
X_PCA  = pca.fit_transform(X)  
explained_variance = pca.explained_variance_ratio_ 
#PCA değerleri dataya eklenmiştir
for i in range (1,6):
    df['PCA_%s' %i] = X_PCA[:, i]

İlk 5 bileşen toplam varyansın %75’ini kapsamaktadır.

X = df.iloc[:,562:]
X.head()
corr = X.corr()

mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True

f, ax = plt.subplots(figsize=(8,6))

cmap = sns.diverging_palette(220, 10, as_cmap=True)

sns.heatmap(corr, mask=mask, cmap=cmap, vmax=1, center=0,annot=True,
            square=True, linewidths=.5, fmt= '.1f', cbar_kws={"shrink": .5})
plt.show()
Bileşenlerin Korelasyon Matrisi

Tabloda görüldüğü üzere bileşenler arasında korelasyon yoktur.

LOJISTIK REGRESYON

#Veri seti %70 train, %30 test olarak bölünmüştür
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30, random_state = 42)

from sklearn.linear_model import LogisticRegression
loj = LogisticRegression(solver = "liblinear")
loj_model = loj.fit(X_train,y_train)

print(loj_model.score(X_test,y_test))
0.7608494921514312

Model %76 accuracy ile tahminleme yapmıştır.

BİLEŞENLERİN GRAFİKSEL GÖSTERİMİ

actvity=df['activity']
data_for_graph = pd.concat([X,actvity],axis=1)

markers = [1,2,3,4,5,6]
sns.pairplot(data_for_graph, hue = 'activity', markers = markers, height=5, plot_kws={"s": 25});
Bileşenlerin Scatter Plot Gösterimi

Temel bileşenlerden oluşan scatter plot incelendiğinde beklenen sonuçlar elde edilmiştir. Yeşil ile gösterilen uzanma hareketinin diğer hareketlerden ayrışmış; kırmızı, mor ve kahverengiyle gösterilen yürüme, merdiven çıkma ve merdiven inme hareketleri ise birbiri ile benzerlik göstermiştir.

SONUÇ

Çalışmada öncelikle detaylı şekilde Temel Bileşenlerin nasıl hesaplandığı sonrasında sklearn kütüphanesi ile hızlı bir şekilde nasıl kullanılabileceği gösterilmiştir. Çalışma sonucunda aralarında yüksek korelasyona sahip verilerin bulunduğu 561 bağımsız değişkenden, korelasyon sorunu olmayan ve tüm datanın %75’ini açıklayabilen 5 bileşenden oluşan yeni veri seti hazırlanmış ve lojistik regresyon algoritması ile modellenmiştir. Korelasyon sorununu çözerek modelde olası çoklu doğrusal bağlantı sorununun önüne geçilmiş ve değişken sayısı azaltılarak training süresinin kısaltılmış ve overfitting riskinin azalması sağlanmıştır.

KAYNAKLAR

  1. Veri Zarflama Analizinde Temel Bileşenler Analizinin Kullanımı — Seda Sütçü Asar (Yüksek Lisans Tezi)
  2. Türkiyede İllerin Ekonomik Performanslarinin Veri Zarflama Analizi Ve Temel Bileşenler Analizi Yöntemleri ile Değerlendirilmesi – Burçin Öner (Yüksek Lisans Tezi)
  3. Temel Bileşenler Analizi için Robust Algoritmaları – Aysu Özen Yaycili (Yüksek Lisans Tezi)
  4. Principal Components in the Problem Of Multicollineartity – Neslihan Ortabaş (Yüksek Lisans Tezi)
  5. Principal Components to Overcome Multicollinearity Problem – Abubakari S.Gwelo (Makale)
  6. https://medium.com/datadriveninvestor/principal-components-analysis-pca-71cc9d43d9fb
  7. https://medium.com/@davidstroud/principal-components-analysis-pca-9d97571a0e91
  8. https://www.kaggle.com/nirajvermafcb/principal-component-analysis-explained
  9. Veri seti: https://www.kaggle.com/mboaglio/simplifiedhuarus

Yazar Hakkında
Toplam 11 yazı
Emre Rıdvan Muratlar
Emre Rıdvan Muratlar
2016 yılından bu yana finans sektöründe veri bilimi üzerine çalışmaktadır. Yıldız Teknik Üniversitesi İstatistik bölümü doktora öğrencisidir.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara