Lei Feng Net Not: Bu makale, Lei Feng Net tarafından derlenen Amerikalı makine öğrenimi uzmanı Jason Brownlee'nin blogundan alınmıştır.
Zaman serisi verilerine makine öğrenimi algoritmalarını uygulamak için özellik mühendisliğinin yardımına ihtiyaç vardır.
Örneğin, tek değişkenli bir zaman serisi veri seti, denetimli öğrenme algoritmalarında kullanılmadan önce girdi ve çıktı özelliklerine dönüştürülmesi gereken bir dizi gözlemden oluşur.
Ancak burada bir sorun var: Her zaman serisi problemi için, kullanabileceğiniz özelliklerin türü ve sayısı konusunda net bir sınır yoktur. Elbette, klasik zaman serisi analiz araçları (korelogram gibi) gecikme değişkenlerini değerlendirmeye yardımcı olabilir, ancak geliştiricilerin zaman damgaları (yıl, ay, gün) gibi diğer özellik türlerini seçmelerine doğrudan yardımcı olamazlar. Ve hareketli istatistikler (hareketli ortalama gibi) türetilmiş özellikler.
Bu nedenle, bu eğitimde, zaman serisi problemleriyle başa çıkmak için özellik önemine ve özellik seçimine göre makine öğrenimi araçlarının nasıl kullanılacağını keşfedeceğiz.
Bu eğitimin incelenmesi sayesinde şunları anlayacaksınız:
Gecikmiş gözlemler için korelasyon grafikleri nasıl oluşturulur ve yorumlanır.
Zaman serisi özelliklerinin önem puanı nasıl hesaplanır ve yorumlanır.
Zaman serisi giriş değişkenlerinde özellik seçimi nasıl yapılır.
Bu eğitim aşağıdaki gibi altı bölüme ayrılmıştır:
1. Aylık araba satış veri setini yükleyin: kullanacağımız veri setini yükleyin.
2. Düzeltme: Veri setinin sonraki analiz ve tahmin için nasıl düzeltileceğini açıklayın.
3. Otokorelasyon grafiği: Zaman serisi verilerinin korelasyon grafiğinin nasıl oluşturulacağını açıklar.
4. Denetimli öğrenmeye zaman serileri: Tek değişkenli zaman serilerini denetimli öğrenme problemlerine dönüştürün.
5. Gecikmeli değişkenlerin özellik önemi: Zaman serisi verilerinin özellik önem puanının nasıl hesaplanacağını ve görüntüleneceğini anlatır.
6. Gecikmeli değişkenlerin özellik seçimi: zaman serisi verilerinin özellik seçimi sonuçlarının nasıl hesaplanacağını ve görüntüleneceğini açıklar.
Bu eğiticide, 1960'tan 1968'e kadar Quebec'teki aylık araba satış verilerine dayanarak açıklayacağız.
Orijinal veriler aşağıdaki bağlantıdan indirilebilir:
https://datamarket.com/data/set/22n4/monthly-car-sales-in-quebec-1960-1968
Bu örnekte, indirilen veri setini car-sales.csv dosyası olarak kaydediyoruz ve dosyadaki dipnot bilgilerini siliyoruz.
Veri setini Pandas kitaplığına göre yükleme kodu aşağıdaki gibidir, verileri bir Seri nesnesi olarak kaydederiz:
# zaman serisinin satır grafiği
Pandalar ithalat Serisinden
matplotlib'den ithalat pyplot
# veri kümesi yükle
series = Series.from_csv ('car-sales.csv', başlık = 0)
# ilk birkaç satırı görüntüle
baskı (seri kafa (5))
Veri kümesinin # satır grafiği
series.plot
pyplot.show
Yukarıdaki örneği çalıştırdıktan sonra yazdırma durumu aşağıdaki gibidir (burada sadece 5 satır listelenmiştir):
Ay
1960-01-016550
1960-02-018728
1960-03-0112026
1960-04-0114395
1960-05-0114587
Ad: Satış, dtype: int64
Tüm verilerin grafiği aşağıda gösterilmiştir:
Yukarıdaki şekilden, otomobil satış verilerinin açık mevsimselliğini ve artan eğilimini görebiliriz.
Bu mevsimsel değişim ve büyüme trendi, dizi tahmininin temel bir özelliği olarak kullanılabilse de, sıra tahminleri yapmamıza yardımcı olan diğer sistem sinyallerini keşfetmemiz gerekirse, bunlar kaldırılmalıdır.
Genellikle mevsimsel değişikliklerin olmadığı zaman serilerini ve büyüme trendlerini durağan seriler olarak adlandırıyoruz.
Bu mevsimsel değişimi ortadan kaldırmak için genellikle mevsimsel fark yöntemi benimsenir ve bu yöntem, sözde mevsimsellikten arındırılmış zaman serileri oluşturmaktır.
Bu örnekte, mevsimsel değişim döngüsü bir yıl (12 ay) gibi görünüyor. Aşağıdaki kod, mevsimsel olarak uyarlanmış zaman serilerinin nasıl hesaplanacağını ve sonuçların mevsimsel olarak düzeltilmiş.csv dosyasına nasıl kaydedileceğini gösterir.
# zaman serisini mevsimsel olarak ayarlayın
Pandalar ithalat Serisinden
matplotlib'den ithalat pyplot
# veri kümesi yükle
series = Series.from_csv ('car-sales.csv', başlık = 0)
# sezonluk fark
farklı = series.diff (12)
# boş verilerin olduğu ilk yılı kırpın
farklı = farklı
# farklı veri kümesini dosyaya kaydet
differenced.to_csv ('seasonally_adjusted.csv')
# plot farklı veri kümesi
differenced.plot
pyplot.show
Kodda, ilk 12 ayda diferansiyel hesaplama için daha önceki veriler bulunmadığından atılmıştır. Nihai mevsimsel fark sonucu aşağıdaki şekilde gösterilmiştir:
Farklı operasyonlarla mevsimsel değişiklikleri ve büyüme trendi bilgilerini başarılı bir şekilde ortadan kaldırdığımız şekilden görülebilmektedir.
Engelsiz koşullar altında, zaman serilerinin özelliklerini çıktı değişkenleriyle olan korelasyona göre seçiyoruz.
Buna otokorelasyon denir ve korelasyon grafikleri olarak da bilinen otokorelasyon grafiklerinin nasıl çizileceğini içerir. Otokorelasyon çizelgesi, her gecikmeli gözlemin korelasyonunu ve bu korelasyonların istatistiksel olarak anlamlı olup olmadığını gösterir.
Örneğin, aşağıdaki kod, aylık otomobil satışları veri kümesindeki tüm gecikmeli değişkenleri çizer.
Pandalar ithalat Serisinden
statsmodels.graphics.tsaplots adresinden plot_acf içe aktarımı
matplotlib'den ithalat pyplot
series = Series.from_csv ('seasonally_adjusted.csv', header = Yok)
plot_acf (dizi)
pyplot.show
Çalıştırdıktan sonra, aşağıda gösterildiği gibi bir korelasyon grafiği veya otokorelasyon fonksiyonu (ACF) grafiği elde edebilirsiniz.
Şekilde, x ekseni gecikme değerini temsil eder ve -1 ile 1 arasındaki y ekseni bu gecikme değerlerinin pozitif ve negatif korelasyonunu gösterir.
Mavi alandaki noktalar istatistiksel önemi gösterir. Histerezis değeri 0 ve korelasyonu 1 olan bir nokta, gözlenen değerin kendisiyle% 100 pozitif korelasyonlu olduğunu gösterir.
Gördüğünüz gibi, grafik 1, 2, 12 ve 17. aylarda önemli bir gecikme gösteriyor.
Bu analiz, sonraki karşılaştırma süreci için iyi bir referans noktası sağlar.
Giriş değişkeni olarak gecikmeli gözlemi (t-1 gibi) ve çıktı değişkeni olarak mevcut gözlemi (t) alarak, tek değişkenli aylık araba satışları veri seti denetimli bir öğrenme problemine dönüştürülebilir.
Bu dönüşümü elde etmek için, aşağıdaki kodda Pandas kütüphanesindeki shift fonksiyonunu çağırıyoruz, shift fonksiyonu aracılığıyla dönüştürülen gözlemler için yeni bir kuyruk oluşturabiliriz.
Aşağıdaki örnekte, mevcut gözlemleri tahmin etmek için 12 aylık gecikme değerleriyle yeni bir zaman serisi oluşturduk.
Koddaki 12 aylık geçiş, NaN değerlerini içerdikleri için ilk 12 satır verinin kullanılamadığı anlamına gelir.
Pandalar ithalat Serisinden
Pandalardan DataFrame'i içe aktarma
# veri kümesi yükle
series = Series.from_csv ('seasonally_adjusted.csv', header = Yok)
# denetimli öğrenim olarak yeniden çerçeve
dataframe = DataFrame
aralıktaki i için (12,0, -1):
dataframe = series.shift (i)
dataframe = series.values
baskı (dataframe.head (13))
dataframe = dataframe
# yeni dosyaya kaydet
dataframe.to_csv ('lags_12months_features.csv', index = False)
Çıktı, ilk 12 satır verinin mevcut olmadığı durumda aşağıda gösterilmiştir.
İlk 12 veri satırını silip sonuçları lags_12months_features.csv dosyasına kaydediyoruz.
Aslında bu süreç 6 veya 24 ay gibi herhangi bir aşamada tekrarlanabilir ve ilgilenen arkadaşlar kendi başlarına deneyebilirler.
Özellik değerlerinin önem puanlarını hesaplamak için torbalanmış ağaçlar ve rastgele ormanlar gibi çeşitli karar ağaçları kullanılabilir.
Bu, tahmine dayalı modeller geliştirirken girdi özelliklerinin göreceli geçerliliğini etkili bir şekilde değerlendirmek için makine öğreniminde yaygın bir kullanımdır.
Burada, zaman serisi tahmini için girdi özelliklerinin göreceli önemini değerlendirmeye yardımcı olması için meşruiyet puanını kullanıyoruz.
Bu, yalnızca yukarıda bahsedilen gecikmeli gözlem özelliklerini tasarlayabildiğimiz için değil, aynı zamanda gözlem zaman damgalarına ve yuvarlanan istatistiklere dayalı diğer özellik türlerini de tasarlayabildiğimiz için önemlidir. Bu nedenle, özellik önemi, özellikleri sıralarken ve seçerken çok etkili bir yöntemdir.
Aşağıdaki örnekte, önceki bölümde oluşturulan veri kümesinin denetimli öğrenme görünümünü yüklüyoruz ve ardından 12 gecikmeli gözlemin her birinin göreli özellik önem puanlarını özetlemek için rastgele orman modelini (kodda RandomForestRegressor) kullanıyoruz. .
Skorun istikrarını sağlamak için burada çok sayıda ağaç kullanılmıştır. Ek olarak, kod her çalıştırıldığında aynı sonucun elde edilmesini sağlamak için rastgele sayı tohumunun başlatılmasını da kullandık.
pandalardan read_csv dosyasını içe aktarın
sklearn.ensemble'dan RandomForestRegressor import
matplotlib'den ithalat pyplot
# veri yükle
dataframe = read_csv ('lags_12months_features.csv', başlık = 0)
dizi = dataframe.values
# girdi ve çıktıya bölün
X = dizi
y = dizi
# rastgele orman modeline sığdır
model = RandomForestRegressor (n_estimators = 500, random_state = 1)
model.fit (X, y)
# önem puanlarını göster
baskı (model.feature_importances_)
# arsa önem puanı
isimler = dataframe.columns.values
ticks =
pyplot.bar (ticks, model.feature_importances_)
pyplot.xticks (keneler, adlar)
pyplot.show
Örneği çalıştırdıktan sonra, aşağıda gösterildiği gibi önce gecikmeli gözlemin önem puanı yazdırılır.
Ardından, skoru gösterildiği gibi bir çubuk grafik olarak çizin.
Şekil, t-12 gözlemlerinin en yüksek göreceli öneme sahip olduğunu, ardından t-2 ve t-4'ün geldiğini göstermektedir.
İlgilenen arkadaşlar, bu sonuç ile yukarıdaki otokorelasyon grafiği arasındaki farkı dikkatlice inceleyebilirler.
Hatta rastgele orman modelleri yerine gradyan artırma, ekstra ağaçlar, torbalanmış karar ağaçları vb. Kullanılabilir ve özelliklerin önem puanları da hesaplanabilir.
Ayrıca özellik seçimi yoluyla en tahmine dayalı giriş özelliklerini otomatik olarak belirleyebilir ve seçebiliriz.
Şu anda, özellik seçiminin en popüler yöntemi Özyineli Özellik Seçimi'dir (RFE).
RFE, bir tahmine dayalı model oluşturabilir, özellik değerlerine farklı ağırlıklar atayabilir ve en küçük ağırlıklara sahip bu özellikleri silebilir.Bu işlemi tekrarlayarak beklenen sayıda özellik elde edilebilir.
Aşağıdaki örnekte, RFE ve rastgele orman modeli aracılığıyla özellik seçiminin nasıl gerçekleştirileceğini gösteriyoruz: Beklenen giriş özelliği sayısının 4 olarak ayarlandığını unutmayın.
pandalardan read_csv dosyasını içe aktarın
sklearn.feature_selection içe aktarma RFE'sinden
sklearn.ensemble'dan RandomForestRegressor import
matplotlib'den ithalat pyplot
# veri kümesi yükle
dataframe = read_csv ('lags_12months_features.csv', başlık = 0)
# girdi ve çıktı değişkenlerine ayırın
dizi = dataframe.values
X = dizi
y = dizi
# özellik seçimi yap
rfe = RFE (RandomForestRegressor (n_estimators = 500, random_state = 1), 4)
fit = rfe.fit (X, y)
# rapor seçili özellik
print ('Seçili Özellikler:')
isimler = dataframe.columns.values
aralıktaki i için (len (fit.support_)):
uygunsa.support_ :
baskı (isimler )
# arsa özelliği sıralaması
isimler = dataframe.columns.values
ticks =
pyplot.bar (işaretler, fit.ranking_)
pyplot.xticks (keneler, adlar)
pyplot.show
Yukarıdaki örneği çalıştırdıktan sonra, aşağıdaki 4 aday özellik elde edilebilir.
Seçili Özellikler:
t-12
t-6
t-4
t-2
Bu sonucun bir önceki bölümde yer alan önem puanından alınan sonuçla tutarlı olduğu görülmektedir.
Program aynı zamanda, aşağıda gösterildiği gibi, seçilecek her bir giriş özelliğinin seçim sırasını gösteren bir çubuk grafik oluşturacaktır (sayı ne kadar küçükse o kadar iyidir).
Benzer şekilde, ilgilenen arkadaşlar da farklı sayıda beklenen özellik ayarlayabilir veya rastgele orman dışındaki modellere geçebilir.
Bu eğiticide, örnek kod aracılığıyla zaman serisi verilerinde özellik seçimi gerçekleştirmek için makine öğrenimi araçlarının nasıl kullanılacağını açıkladık.
Özellikle aşağıdaki üç noktayı ortaya koyduk:
Yüksek korelasyonlu gecikmeli gözlemlerin korelasyon diyagramları nasıl yorumlanır.
Zaman serisi verilerinde özellik önem puanı nasıl hesaplanır ve görüntülenir.
Zaman serisi verilerinde en alakalı girdi değişkenlerini belirlemek için özellik seçimi nasıl kullanılır.
Kaynak: machinelearningmastery, Leifeng.com tarafından derlenmiştir.