Sınıflandırma amacıyla verileri test etmek için PCA uygulama


10

Geçenlerde harika PCA'yı öğrendim ve scikit-öğren belgelerinde ana hatlarıyla verilen örneği yaptım .

Sınıflandırma amacıyla PCA'yı yeni veri noktalarına nasıl uygulayabileceğimi bilmek istiyorum.

PCA'yı 2 boyutlu bir düzlemde (x, y ekseni) görselleştirdikten sonra, muhtemelen bir tarafı bir sınıflandırma diğeri başka bir sınıflandırma olacak şekilde veri noktalarını ayırmak için bir çizgi çizebileceğimi görüyorum. Bu "sınırı" nasıl çizerim ve bunu yeni veri noktalarına nasıl uygularım?


3
PCA bir sınıflandırıcı değildir, ancak PCA'ya "uydurmak" için kullanılan değişkenlerin yeni noktalarda ölçüldüğü varsayılarak PCA'ya yeni gözlemler koymak mümkündür. Daha sonra yeni puanları, değişken puanların (yüklemeler), veriler tarafından verilen ağırlıkların ağırlıklı toplamına yerleştirirsiniz. Bununla birlikte, PCA'nızdan keyfi olarak bir çizgi çizmek bana iyi bir sınıflandırıcı gibi gelmiyor ...
Gavin Simpson

Yanıtlar:


16

PCA bir sınıflandırma aracı değil, bir boyut küçültme aracıdır. Scikit-bilgi olarak, tüm sınıflandırıcılar ve tahmincileri bir var predictyöntemini PCA değildir . PCA tarafından dönüştürülen verilere bir sınıflandırıcı takmanız gerekir. Scikit-Learn'in birçok sınıflandırıcısı vardır. PCA tarafından dönüştürülen veriler üzerinde bir karar ağacı kullanımına örnek . İris veri kümesinde olduğu gibi ikiden fazla sınıf içeren veriler için iyi çalıştığı için karar ağacı sınıflandırıcısını seçtim.

from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

# load data
iris = load_iris()

# initiate PCA and classifier
pca = PCA()
classifier = DecisionTreeClassifier()

# transform / fit

X_transformed = pca.fit_transform(iris.data)
classifier.fit(X_transformed, iris.target)

# predict "new" data
# (I'm faking it here by using the original data)

newdata = iris.data

# transform new data using already fitted pca
# (don't re-fit the pca)
newdata_transformed = pca.transform(newdata)

# predict labels using the trained classifier

pred_labels = classifier.predict(newdata_transformed)

SciKit learn, transformatörleri ve son sınıflandırıcıyı birbirine zincirlemenizi sağlayan Pipeline adlı kullanışlı bir araca sahiptir :

# you can make this a lot easier using Pipeline

from sklearn.pipeline import Pipeline

# fits PCA, transforms data and fits the decision tree classifier
# on the transformed data
pipe = Pipeline([('pca', PCA()),
                 ('tree', DecisionTreeClassifier())])

pipe.fit(iris.data, iris.target)

pipe.predict(newdata)

Bu, çapraz doğrulama işlemi yaparken, boru hattının HERHANGİ BİR adımını yanlışlıkla test veri kümenize yeniden takmanızı engellediğinden özellikle yararlıdır:

from sklearn.cross_validation import cross_val_score
print cross_val_score(pipe, iris.data, iris.target)
# [ 0.96078431  0.90196078  1.        ]

Bu arada, iyi sınıflandırma sonuçları elde etmek için PCA kullanmanız bile gerekmeyebilir. İris veri kümesinin pek çok boyutu yoktur ve karar ağaçları dönüştürülmemiş veriler üzerinde zaten iyi performans gösterecektir.


6
dd

@xeon bunu bilmiyordum.
Austin Richardson

Belki de PCA'yı bir rotasyon olarak hayal edip etmediğinizi görmek daha iyidir. Veri kümenizin, sınıflar varyansla ayırt edilebilecek şekilde bu özelliğe sahip olması durumunda, ihtiyacınız olan tek şey bu döndürme olacaktır.
Vladislavs Dovgalecs

2
@xeon: Tüm boyutlar korunduğunda, PCA tarafından elde edilen tek şey veri kümesini süslemektir. Bazı sınıflandırıcılar için gerçekten yararlı olabilir , ancak büyük çoğunluğu umursamıyor.
amip

1
@amoeba Tamamen katılıyorum, bu sadece küçük bir detay. Böyle belirli bir veri seti ile uğraşmak ve her zaman bu dersi hatırlamak zorunda kaldım.
Vladislavs Dovgalecs

0

PCA'yı yeni verilere uygulamak istiyorsanız, önce bazı eğitim veri kümesine bir model yerleştirmelisiniz. İsteyeceğiniz model nedir? Bu, veri kümesinden çıkardığınız ortalama vektör, her veri vektörünü "beyazlatmak" için kullandığınız varyanslar ve öğrenilen haritalama matrisidir. Böylece, yeni veri kümesini egzersiz verileriyle aynı alanda eşlemek için, önce ortalamayı çıkarır, beyazlatır ve haritalama matrisi ile eşlersiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.