Scikit-learn kullanarak polinom regresyon


29

Scikit-learn'ı polinom regresyonu için kullanmaya çalışıyorum. Okuduğum kadarıyla polinom regresyonu özel bir lineer regresyon vakasıdır. Belki de bir scikit'in genelleştirilmiş doğrusal modellerinden birinin daha yüksek dereceli polinomlara uyması için parametreleştirilebileceğini ümit ediyordum ama bunun için bir seçenek göremiyorum.

Poli çekirdekli bir Support Vector Regressor kullanmayı başardım. Bu, verilerimin bir alt kümesinde işe yaradı, ancak daha büyük veri kümelerine uyması çok uzun sürüyor, bu yüzden hala daha hızlı bir şeyler bulmam gerekiyor (biraz hassas işlem olsa bile).

Burada bariz bir şeyi mi özlüyorum?

Yanıtlar:


25

Veriler , bir sütun vektörü ve y , hedef vektör olarak, x'in polinomlarını ekleyerek polinom regresyonu yapabilirsiniz . Örneğin, düşününxyx

x=[2113]

Doğrusal regresyonda sadece bu vektörün kullanılması, modeli ima eder:

y=α1x

X=[24811113132133]

Bu, sklearn'ün doğrusal regresyonunda kullandığımız yeni veri matrisimizdir ve modeli temsil eder:

y=α1x+α2x2+α3x3

1


26

teori

Polinom regresyonu, özel bir doğrusal regresyon vakasıdır. Ana fikri ile özelliklerinizi nasıl seçersiniz. 2 değişkenli çok değişkenli regresyona bakarak: x1ve x2. Doğrusal regresyon şöyle görünecek:y = a1 * x1 + a2 * x2.

Şimdi bir polinom regresyonuna sahip olmak istiyorsunuz (hadi 2 derece polinom yapalım). Biz birkaç ek özellikler oluşturur: x1*x2, x1^2ve x2^2. Böylece 'doğrusal regresyon'unuzu alacağız:

y = a1 * x1 + a2 * x2 + a3 * x1*x2 + a4 * x1^2 + a5 * x2^2

Bu , boyutsal bir kavramın lanetini güzel bir şekilde göstermektedir , çünkü yeni özelliklerin sayısı, polinom derecesinin artmasıyla doğrusaldan çok daha hızlı artmaktadır. Bu konsepte buradan bir göz atabilirsiniz .

Scikit-learn ile alıştırma yapın

Bunların hepsini scikit içerisinde yapmanız gerekmez. Polinom regresyonu zaten orada mevcut ( 0.15 versiyonunda. Nasıl güncelleyeceğinizi kontrol edin ).

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [[0.49, 0.18]]
#Edit: added second square bracket above to fix the ValueError problem

poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)

clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)

1
X1 * x2 gibi bir etkileşim terimine sahip olmak istemiyorsam, X_'yi manuel olarak yapılandırmam gerekiyor mu? PolynomialFeatures () yapıcısında "interaction_only" parametresi var ve varsayılan olarak False. Ancak bunu True olarak ayarlamak istediğimin tam tersini yapar: SADECE etkileşim terimlerini tutar ve x1 ^ 2, x2 ^ 2 vb.
Tutmaz

Youtube'a olan bağlantı, videonun artık mevcut olmadığını iddia ediyor. Bununla başka bağlantın var mı?
Markon

@Markon bu listedeki herhangi bir video yeterince iyidir: youtube.com/results?search_query=curse+of+dimensionality
Salvador Dali

@SalvadorDali bu boyutsallık azaltma için ne
kullanıcı3916597

Acaba verileri uygulamadan önce PolynomialFeaturesmi yoksa sonra mı ortalamalıyız?
renakre

2

x1x2y=a1x1+a2x2+a3x12+a4x22+a5x1x2a5x1x2) bahsettiğim kişi.

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.