Karşılaşacağınız "Yapay Zeka Sınıfı" (kod makalesi) Makine öğrenimi "çukurlarında" özellik seçimi nasıl yapılır

Selam.

Dünkü kursu gördüyseniz - "Makine öğreniminde karşılaşabileceğiniz" çukurlar "- Özellik seçimi nasıl yapılır (teori)" ve yöntemin uygulanmasıyla çok ilgileniyorsanız, o zaman kod uygulamasının bu açıklamasını umuyorum Makaleler, gelecekte özellik seçimi görevinizi kolaylaştırabilir.

Burada öncelikle verilerin gereksiz özelliklerini ve ilgisiz özelliklerini görselleştiriyoruz, böylece özellik seçiminin motivasyonunu daha iyi anlayabiliriz ve ardından kodun görüntülenmesi için filtreleme yöntemini, sarma yöntemini ve gömme yöntemini kullanırız. Özellik seçiminin üstünlüğünü yansıtmak için test setindeki genelleme hatasını gözlemleyin ve son olarak daha iyi sonuçlar alıp almayacağını görmek için onu birleştirmeye çalışıyoruz.

Önceki makalede kullandığımız diyabet verilerinin eski bir sorusu var, yani cinsiyet ile diyabetin kötüleşmesi arasında herhangi bir ilişki var mı? Başka bir deyişle, alakasız bir özellik mi?

sklearn ithal veri kümelerinden

seaborn'u sns olarak ithal etmek

matplotlib.pyplot dosyasını plt olarak içe aktar

numpy'yi np olarak içe aktar

# Verileri oku

data = datasets.load_diabetes ()

X = veri

y = veri

#

sns.set (style = 'darkgrid')

plt.plot (X, y, '. k', işaret boyutu = 5)

plt.xlabel ("Cinsiyet")

plt.ylabel ('hastalığın ilerlemesinin nicel ölçüsü')

plt.legend ()

plt.show ()

Şekilden de görebileceğimiz gibi, her cinsiyette hedeflerimiz tekdüze bir dağılım eğilimi gösteriyor. Cinsiyetin alakasız bir özellik olması çok muhtemeldir ancak tüm özellikleri test etmek için en iyisi korelasyon katsayısı yöntemini kullanmaktır. :

sklearn ithal veri kümelerinden

fromsklearn.feature_selection import f_regression

seaborn'u sns olarak ithal etmek

matplotlib.pyplot dosyasını plt olarak içe aktar

numpy'yi np olarak içe aktar

# Verileri oku

data = datasets.load_diabetes ()

X = veri

y = veri

# Korelasyon katsayısını hesaplayın

score = f_regression (X, y)

#

sns.set (style = 'darkgrid')

sns.barplot (skor, veri)

plt.xlabel ('Puan')

plt.ylabel ('özellikler')

plt.legend ()

plt.show ()

Korelasyon katsayısı, özellik ile hedef arasındaki doğrusal korelasyonu ölçer.Şekilden cinsiyet ile hedef arasındaki korelasyon katsayısının çok küçük olduğu görülebilir, bu nedenle 'yaş', 's1' ve '2' gibi geri kalanlar kaldırılmalı mı? Özellikler hakkında karşılıklı bilgi taraması yapıyoruz:

......

fromsklearn.feature_selection import mutual_info_regression

score = mutual_info_regression (X, y, discrete_features = False, random_state = 0)

......

Ek olarak, Spearman korelasyon katsayısını da kullanabiliriz:

scipy.stats'den spearmanr içe aktarma

score =

için n içinde aralığı (10):

score.append (np.abs (spearmanr (X, y)))

"Yaş", "cinsiyet", "s1" ve "s2" nin hala en düşük dört puanlama özelliği olduğu, "yaş", "cinsiyet" ve "s2" nin hala en düşük puanlama özelliği olduğu görülebilir. Karşılıklı bilgi ve Pearson katsayısı ve Spearman katsayısının belirli bir tutarlılık elde ettiğini söyleyebiliriz. Daha sonra, bu tür filtrelemeden sonra, özelliklerin önemini anlıyoruz ve son modele girmek için kaç özellik seçtiğimiz, kaç özelliğin en iyi performansı elde edebileceğine bağlı.

Bu noktaya kadar yaptığımız şey sadece özellikler ve hedefler arasındaki korelasyonu test ederek ilgisiz özellikleri ortadan kaldırmaktır ama ayrıca özellik seçimimizin önemli bir görevi de fazlalık özellikleri ortadan kaldırmaktır. Verilerimizle ilgili olarak, sezgisel olarak yaş ve tansiyonun belirli bir ilişkisi olduğunu düşünebiliriz:

plt.plot (X, X, '. k')

Ama sadece örnek uzaydan gözümüzde canlandırırsak, kesin yargılarda bulunamayız mesela bu resimde herhangi bir bilgi alamıyoruz. Daha iyi bir yaklaşım, korelasyon matrisini elde etmek için her özellik ve her özellik için korelasyon katsayıları yapmaktır (şu anda yalnızca özellikleri işlediğimizi ve hedef i ile hiçbir ilgimiz olmadığını unutmayın):

scipy.stats'den spearmanr içe aktarma

seaborn'u sns olarak ithal etmek

sklearn ithal veri kümelerinden

data = datasets.load_diabetes ()

X = veri

score_mat = np.abs (mızrakçı (X))

sns.set (stil = 'beyaz')

sns.heatmap (score_mat, annot = True, center = 0)

plt.show ()

Kare ne kadar hafifse, korelasyon o kadar yüksek olur. İlginç bir gerçeği fark edebiliriz: Endişelendiğimiz yaş ve kan basıncı arasındaki korelasyon sadece 0,35'tir; bu, 0,88'e kadar yüksek olan 1 'serum ve 2' serumu arasındaki korelasyondan çok daha düşük, while's3 'serumu ve 'Serumun korelasyon derecesi de 0.79'dur. Bu korelasyon derecesini sezgisel olarak anlamak için, yüksek korelasyonlu serum 1' ve serum 2 'grafiğini yapabiliriz:

plt.plot (X, X, '. k')

İkisi güçlü bir doğrusal ilişki gösteriyor! O zaman bunun gereksiz bir özellik olduğu sonucuna varabiliriz ve bunlardan sadece birini tutmamız gerekir.

Yukarıdan, filtreleme yönteminin iki ana görevi olduğu görülebilir: özellikler arasındaki korelasyonu kontrol ederek gereksiz özellikleri bulmak ve özellikler ile hedefler arasındaki korelasyonu kontrol ederek ilgisiz özellikleri bulmak.

Daha sonra, paketleme yönteminin anlaşılması nispeten kolaydır, tüm özellikleri koleksiyona atar ve açgözlü stratejiyi kullanır. Doğrusal modeli yalnızca farklı özellik sayılarının modelin uydurma yeteneği üzerindeki etkisini gözlemlemek için kullanabiliriz Teoriye göre, ne kadar az özellik, model parametreleri o kadar az ve modelin uydurma yeteneği o kadar zayıftır diyoruz. Bununla birlikte, özellik seçiminin amacı, modelin genelleme yeteneğini güçlendirmektir, bu nedenle özellik numarasını bir hiperparametre olarak ele almalı ve çapraz doğrulama ile test setindeki genelleme hatasını gözlemlemeliyiz:

sklearn.feature_selection'dan RFECV'yi içe aktar

seaborn'u sns olarak ithal etmek

matplotlib.pyplot dosyasını plt olarak içe aktar

numpy'yi np olarak içe aktar

sklearn.linear_model'den içe aktarma LinearRegression

fromsklearn.model_selection import KFold

data = datasets.load_diabetes ()

X = veri

y = veri

lr = Doğrusal Regresyon ()

scorer = 'neg_mean_squared_error'

rfecv = RFECV (tahmin edici = lr, adım = 1, cv = KFold (5),

puanlama = puanlayıcı)

rfecv.fit (X, y)

sns.set (style = 'darkgrid')

plt.xlabel ("Seçilen özelliklerin sayısı")

plt.ylabel ("Çapraz doğrulama puanı (MSE)")

plt.plot (aralık (1, len (rfecv.grid_scores_) +1), -rfecv.grid_scores _, 'r', label = "Optimum sayı özellikleri:% d"% rfecv.n_features_)

plt.legend ()

plt.show ()

Sarma yöntemini kullanarak, özellik numarası 6 olan en iyi özellik alt kümesini seçebiliriz. Bu özellik alt kümesinin genelleme yeteneği, tüm özellik kümelerininkinden daha iyidir. En iyi özellik alt kümesinin MSE'si yaklaşık 2946.88'dir ve toplam özellik MSE yaklaşık 2993'tür ve veriler üzerindeki özellik seçiminin modelin performansını önemli ölçüde artırabileceğini belirtir. Aşağıdaki kodla hangi özelliklerin korunduğunu kontrol edebiliriz:

np.array (data) # Numpy dizisinin Boolean değeri segmentasyon yöntemi burada kullanılır

Sarmalama yöntemi çok basit ve kaba. Özellik seçme işlevini gerçekleştirmek için doğrudan özellik alt kümelerinin performansını kullanır, ancak öğrenciyi düzeltir. Özellikleri seçmek için doğrusal regresyon kullanırsak, yalnızca bu özelliklerin doğrusal regresyonda en fazla olduğunu gösterebilir. Bu iyi bir kombinasyondur ve vektör makineleri ve Bayes modelleri gibi daha geniş bir model yelpazesine yerleştirilemez.

Gömme yöntemi öğrenciye yerleştirilir ve eğitim süreci ve özellik seçimi aynı anda tamamlanır. Bu yerleştirme, sarma yöntemi ile seçilen özellikler öğrencinin değişmesiyle değişebileceğinden, öğrenciyi özellik seçiminden ayırma zahmetini ortadan kaldırır. .

"Overfitting Problem (Code Article)" da böyle bir resmimiz var (en iyisi

Yaklaşık 0.057):

Modelin genelleme hatasının, düzenlileştirme katsayısı ile değiştiğini ve genelleme hatasını en aza indirenin seçildiğini gösterir.En iyisi, parametre uzayındaki bazı özelliklerin kaybolmasına karşılık gelir:

coefs_lasso =

alfa = np.linspace (0,01,0,5,1000)

için a içinde alphas:

kement = Kement (alfa = a)

lasso.fit (X, y)

coefs_lasso.append ((lasso.coef_))

Düzenlilik, modelin optimizasyonuna katıldığı için çok kullanışlı bir yöntemdir, ancak modelin kendisine bağlı değildir, bu nedenle birçok modele gömülebilir. Doğrusal Regresyonda gömülü ise, daha önce defalarca tartıştığımız formdur, ancak bir vektör makinesine gömülü ise, özellik seçiminde de rol oynayabilir.

Modelin perspektifinden özellik seçimine bakıldığında, özü, daha iyi performans, daha hızlı eğitim hızı ve hatta daha iyi yorumlanabilirlik elde etmek için modelimizin girdi değişkenlerinin boyutsallığını azaltmaktır.

Öyleyse benzer bir amaca ulaşmanın başka bir yolu var mı? Bir sonraki makalede boyutsallık azaltma ile özellik seçimi arasındaki farkı ve boyutsal azaltmayı uygun şekilde nasıl uygulayabileceğimizi tanıtacağız.

Çekirdeği okuyun

Sınıf İPUÇLARI

Bu makaledeki veriler, esas olarak regresyon sorunları için "Aşırı Yerleştirme Problemi (Kod)" daki verilerle aynıdır. Bir sınıflandırma problemi ise, filtreleme yöntemindeki korelasyon katsayısı ve karşılıklı bilgi yöntemi buna göre değiştirilmeli sklearn.featureselection ve chi2 fclassif ve mutualinfoclassif kullanmalıyız.

Bu makalede kullanılan spearman katsayısı yöntemi Scipy'nin istatistiksel modülünden gelmektedir. Ek olarak, yaygın olarak kullanılan filtreleme yöntemlerinin gerektirdiği işlevlerin neredeyse tamamı Scipy'de bulunabilir.

Teorik olarak, filtreleme yöntemiyle çıkarılan özellikler, sarma yöntemi ile kaldırılanlarla aynı olmalıdır.Ancak, gerçek durumlarda, verilerin dağılımı bilinmediğinden, filtreleme yönteminin birçok matematiksel varsayımı, gerçek veriler bile artık geçerli değildir. İlişki çok büyüktür ve ilişki çok karmaşıktır ve filtreleme yönteminin özellikleri genellikle sarma yönteminin özelliklerinden farklıdır.

Sarma yönteminin prensibi basit ve algoritmanın kullanımı kolay olmasına rağmen, pratikte çoğu zaman birçok özellik vardır ve hesaplama miktarı çok büyük olacaktır. Bu nedenle, düzenleme yöntemi genellikle insanlar tarafından kullanılır ve filtreleme kuralı genellikle bir referans değer yöntemi olarak kullanılır ve filtreleme, özellik seçiminin son noktası olarak görülmez.

Yazar: Head & Shoulders olmadan keşiş

Yeniden yazdırmanız gerekirse, lütfen arka planda bir mesaj bırakın ve yeniden yazdırma şartnamelerine uyun.

Sevimlilik, seksi karşısında değersizdir! Casus fotoğrafları olmayan yeni Volkswagen POLO
önceki
Elektrikli arabaların acı noktaları satın alınamayacak kadar çok mu? O halde bu incelemeye dikkat etmelisiniz
Sonraki
Core Voice Today | AI, "bağımlıları" ortadan kaldırabilir mi?
Paradise LaBo: Oyunlarla ilgili çocukluk anınızın şu anda canlanmasına izin verin
Geri dönüş sırrı mı? Celtics ilk yarıda çemberi parçaladı ve Irving başını salladı
Doinb bu sefer gerçekten süper taşıyor, IG düşük durumda ve RW'ye kapandı
İOS'taki verimlilik eseri olan iş akışı ücretsizdir ve onu kullanmayı öğrenmek, yüz milyonları toplamak gibidir!
"Yapay Zeka Sınıfı" nda özellik seçimi nasıl yapılır (Teori) Makine öğreniminde karşılaşacağınız "çukurlar"
Düşük profil kalbinizin atmasını sağlamak için yeterlidir! BMW X7 konfigürasyon gösterimi / Şangay Otomobil Fuarı listelendi
Android'in yeni sürümü: Hileli yazılıma veda edin, daha canlandırıcı, daha güzel ve daha fazla güç tasarrufu yapın, bırakın iOS sizi kıskansın!
Bugünün temel sesi | sanal makyaj, seçim fondöten ruj numarası karışık değil!
Jinkang SERES SF5 seri üretim versiyonu 10 Nisan'da piyasaya sürülecek ve resmi olarak üçüncü çeyrekte listelenecek
Medya insanları hararetle tartışıyor: La Liga'nın gücü gerçekten yüksek, Wu Lei'nin performansı beklenenden daha iyi
Bugünün temel sesi | Dünya Kupası iniş ve çıkışları, istikrarlı bir dalga oluşturmak için yapay zekayı hızla takip edin!
To Top