Java geliştiricileri için makine öğrenimi, Bölüm 1: Makine öğrenimi için algoritmalar

Kendi kendine giden arabalar, yüz algılama yazılımı ve ses kontrollü hoparlörlerin tümü makine öğrenimi teknolojileri ve çerçeveleri üzerine inşa edilmiştir - ve bunlar yalnızca ilk dalga. Önümüzdeki on yıl içinde, yeni nesil ürünler dünyamızı dönüştürecek, yazılım geliştirmeye ve yarattığımız ve kullandığımız uygulamalara ve ürünlere yeni yaklaşımlar başlatacak.

Bir Java geliştiricisi olarak, özellikle teknoloji şirketleri makine öğrenimine ciddi şekilde yatırım yapmaya başladığı için bu eğrinin önüne geçmek istiyorsunuz. Bugün öğrendiklerinizi önümüzdeki beş yıl içinde geliştirebilirsiniz, ancak bir yerden başlamalısınız.

Bu makale başlamanıza yardımcı olacaktır. Makine öğreniminin nasıl çalıştığına dair bir ilk izlenimle başlayacak ve ardından bir makine öğrenimi algoritmasını uygulamaya ve eğitmeye yönelik kısa bir kılavuz izleyeceksiniz. En uygun tahmin işlevini eğitmek, puanlamak ve seçmek için kullanabileceğiniz öğrenme algoritması ve özelliklerinin içlerini inceledikten sonra, makine öğrenimi çözümleri oluşturmak için bir JVM çerçevesi olan Weka'yı kullanmaya genel bir bakış elde edeceksiniz. Bu makale, akıllı uygulamalar geliştirmeye yönelik en yaygın yaklaşım olan denetimli makine öğrenimine odaklanmaktadır.

Java geliştiricileri için makine öğrenimi, Bölüm 2

Bir sonraki adıma hazır mısınız? Bu öğreticinin ikinci yarısı, makine öğrenimi veri ardışık düzeninizi nasıl geliştirip dağıtacağınızı gösterir.

Makine öğrenimi ve yapay zeka

Makine öğrenimi, insan zekasını taklit edebilen makineler üretmeyi amaçlayan yapay zeka alanından gelişti. Makine öğrenimi bilgisayar bilimlerinde yükselen bir trend olsa da, yapay zeka yeni bir bilimsel alan değil. 1950'lerin başında Alan Turing tarafından geliştirilen Turing testi, bir bilgisayarın gerçek zekaya sahip olup olmadığını belirlemek için oluşturulan ilk testlerden biriydi. Turing testine göre, bir bilgisayar, bir insanı kandırarak kendisinin de insan olduğuna inanması için insan zekasını kanıtlayabilir.

Son teknoloji makine öğrenimi yaklaşımlarının çoğu, onlarca yıllık kavramlara dayanmaktadır. Son on yılda değişen şey, bilgisayarların (ve dağıtılmış bilgi işlem platformlarının) artık makine öğrenimi algoritmaları için gereken işlem gücüne sahip olmasıdır. Çoğu makine öğrenimi algoritması, işlemek için çok sayıda matris çarpımı ve diğer matematiksel işlemler gerektirir. Bu hesaplamaları yönetmek için hesaplama teknolojisi yirmi yıl önce bile yoktu, ama bugün var.

Makine öğrenimi, programların kalite iyileştirme süreçlerini yürütmesini ve yeteneklerini insan müdahalesi olmadan genişletmesini sağlar. Makine öğrenimi ile oluşturulmuş bir program, kendi kodunu güncelleyebilir veya genişletebilir.

Denetimli öğrenmeye karşı denetimsiz öğrenim

Denetimli öğrenme ve denetimsiz öğrenme, makine öğrenimine yönelik en popüler yaklaşımlardır. Her ikisi de ilişkilendirmek ve öğrenmek için makineye çok sayıda veri kaydı beslemeyi gerektirir. Bu tür toplanan veri kayıtları genellikle özellik vektörleri olarak bilinir . Tek bir ev söz konusu olduğunda, bir özellik vektörü, genel ev boyutu, oda sayısı ve evin yaşı gibi özelliklerden oluşabilir.

Gelen denetimli öğrenme , bir makine öğrenme algoritması özelliği vektörleri ile ilgili sorulara doğru cevap veren şekil eğitilmiştir. Bir algoritma eğitmek için, makineye bir dizi özellik vektörü ve ilişkili bir etiket beslenir. Etiketler tipik olarak bir insan açıklayıcı tarafından sağlanır ve belirli bir soruya doğru "cevabı" temsil eder. Öğrenme algoritması, iç yapıları ve aralarındaki ilişkileri bulmak için özellik vektörlerini ve bunların doğru etiketlerini analiz eder. Böylece makine sorgulara doğru yanıt vermeyi öğrenir.

Örnek olarak, akıllı bir emlak uygulaması, boyut, oda sayısı ve bir dizi ev için ilgili yaş gibi özellik vektörleriyle eğitilebilir. Bir insan etiketleyicisi, bu faktörlere göre her evi doğru ev fiyatı ile etiketler. Bu verileri analiz ederek, emlak uygulaması " Bu ev için ne kadar para alabilirim? " Sorusuna cevap verecek şekilde eğitilirdi.

Eğitim süreci bittikten sonra, yeni giriş verileri etiketlenmeyecektir. Makine, görünmeyen, etiketlenmemiş özellik vektörleri için bile sorgulara doğru şekilde yanıt verebilecektir.

Gelen denetimsiz öğrenme , algoritma insan etiketleme, hatta sorular olmadan cevapları tahmin etmek programlanmıştır. Denetimsiz öğrenme, etiketleri veya sonuçların ne olması gerektiğini önceden belirlemekten ziyade, daha önce bilinmeyen bağıntıları keşfetmek için büyük veri kümelerini ve işleme gücünü kullanır. Örneğin tüketici ürünü pazarlamasında, gizli ilişkileri veya tüketici gruplamasını belirlemek için denetimsiz öğrenme kullanılabilir ve sonunda yeni veya geliştirilmiş pazarlama stratejilerine yol açar.

Bu makale, günümüzde makine öğrenimine yönelik en yaygın yaklaşım olan denetimli makine öğrenimine odaklanmaktadır.

Denetimli makine öğrenimi

Tüm makine öğrenimi verilere dayalıdır. Denetimli bir makine öğrenimi projesi için, aradığınız sonuç için verileri anlamlı bir şekilde etiketlemeniz gerekecektir. Tablo 1'de, ev kaydının her satırının "konut fiyatı" için bir etiket içerdiğine dikkat edin. Sıra verilerini ev fiyat etiketi ile ilişkilendirerek, algoritma sonunda veri setinde olmayan bir evin piyasa fiyatını tahmin edebilecektir (ev büyüklüğünün metrekareye ve ev fiyatının avroya dayandığına dikkat edin).

Tablo 1. Ev kayıtları

ÖZELLİK ÖZELLİK ÖZELLİK ETİKET
Evin boyutu Oda sayısı Evin yaşı Tahmini ev maliyeti
90 m2 / 295 ft 2 oda 23 yıl 249.000 €
101 m2 / 331 ft 3 oda n / a 338.000 €
1330 m2 / 4363 ft 11 oda 12 yıl 6.500.000 €

Erken aşamalarda, veri kayıtlarını büyük olasılıkla elle etiketleyeceksiniz, ancak sonunda programınızı bu süreci otomatikleştirmek için eğitebilirsiniz. Muhtemelen bunu e-posta uygulamalarında görmüşsünüzdür, burada e-postayı spam klasörünüze taşımak "Bu spam mi?" Yanıt verdiğinizde, görmek istemediğiniz postaları tanımak için programı eğitiyorsunuz. Uygulamanın spam filtresi, gelecekteki postaları aynı kaynaktan veya benzer içeriğe sahip olacak şekilde etiketlemeyi öğrenir ve imha eder.

Etiketli veri kümeleri yalnızca eğitim ve test amaçları için gereklidir. Bu aşama bittikten sonra, makine öğrenimi algoritması etiketlenmemiş veri örnekleri üzerinde çalışır. Örneğin, tahmin algoritmasına yeni, etiketlenmemiş bir ev kaydı besleyebilirsiniz ve bu, eğitim verilerine dayalı olarak beklenen ev fiyatını otomatik olarak tahmin eder.

Makineler tahmin etmeyi nasıl öğrenir?

Denetimli makine öğreniminin zorluğu, belirli bir soru için uygun tahmin işlevini bulmaktır. Matematiksel olarak zorluk, girdi değişkenleri x'i alan ve tahmin değeri y'yi döndüren girdi-çıktı işlevini bulmaktır . Bu hipotez işlevi (h θ ) eğitim sürecinin çıktısıdır. Genellikle hipotez işlevi aynı zamanda hedef veya tahmin işlevi olarak da adlandırılır .

Gregor Roth

Çoğu durumda, x , çoklu veri noktasını temsil eder. Örneğimizde bu, ev büyüklüğü değeri ve oda sayısı değeri ile tanımlanan tek bir evin iki boyutlu bir veri noktası olabilir . Bu değerlerin dizisine özellik vektörü denir . Somut bir hedef fonksiyon verildiğinde, fonksiyon her bir özellik vektörü x için bir tahmin yapmak için kullanılabilir . Tek bir evin fiyatını tahmin etmek için, ev boyutunu ve oda sayısını içeren özellik vektörünü {101.0, 3.0} kullanarak hedef işlevi çağırabilirsiniz:

 // target function h (which is the output of the learn process) Function h = ...; // set the feature vector with house size=101 and number-of-rooms=3 Double[] x = new Double[] { 101.0, 3.0 }; // and predicted the house price (label) double y = h.apply(x); 

Liste 1'de, dizi değişkeni x değeri evin özellik vektörünü temsil eder. Y hedef işlevi tarafından döndürülen değeri tahmin ev fiyatıdır.

Makine öğreniminin zorluğu, bilinmeyen, görünmeyen veri örnekleri için olabildiğince doğru çalışacak bir hedef işlev tanımlamaktır. Makine öğrenmesinde, hedef işlev (h θ ) bazen model olarak adlandırılır . Bu model, öğrenme sürecinin sonucudur.

Gregor Roth

Etiketli eğitim örneklerine dayalı olarak, öğrenme algoritması eğitim verilerindeki yapıları veya kalıpları arar. Bunlardan, bu verilerden iyi bir genelleme yapan bir model üretir.

Tipik olarak, öğrenme süreci araştırıcıdır . Çoğu durumda, işlem, farklı öğrenme algoritmaları ve konfigürasyonları varyasyonları kullanılarak birçok kez gerçekleştirilecektir.

Sonunda, tüm modeller performans ölçütlerine göre değerlendirilecek ve en iyisi seçilecektir. Bu model daha sonra gelecekteki etiketlenmemiş veri örneklerine ilişkin tahminleri hesaplamak için kullanılacaktır.

Doğrusal regresyon

Bir makineyi düşünmesi için eğitmek için ilk adım, kullanacağınız öğrenme algoritmasını seçmektir. Doğrusal regresyon , en basit ve en popüler denetimli öğrenme algoritmalarından biridir. Bu algoritma, giriş özellikleri ile çıktılı etiket arasındaki ilişkinin doğrusal olduğunu varsayar. Aşağıdaki genel doğrusal regresyon işlevi , bir teta parametresi (θ) ile çarpılan özellik vektörünün her bir öğesini özetleyerek tahmin edilen değeri döndürür . Teta parametreleri, eğitim verilerine dayalı olarak regresyon işlevini uyarlamak veya "ayarlamak" için eğitim sürecinde kullanılır.

Gregor Roth

In the linear regression function, theta parameters and feature parameters are enumerated by a subscription number. The subscription number indicates the position of theta parameters (θ) and feature parameters (x) within the vector. Note that feature x0 is a constant offset term set with the value 1 for computational purposes. As a result, the index of a domain-specific feature such as house-size will start with x1. As an example, if x1 is set for the first value of the House feature vector, house size, then x2 will be set for the next value, number-of-rooms, and so forth.

Listing 2 shows a Java implementation of this linear regression function, shown mathematically as hθ(x). For simplicity, the calculation is done using the data type double. Within the apply() method, it is expected that the first element of the array has been set with a value of 1.0 outside of this function.

Listing 2. Linear regression in Java

 public class LinearRegressionFunction implements Function { private final double[] thetaVector; LinearRegressionFunction(double[] thetaVector) { this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length); } public Double apply(Double[] featureVector) { // for computational reasons the first element has to be 1.0 assert featureVector[0] == 1.0; // simple, sequential implementation double prediction = 0; for (int j = 0; j < thetaVector.length; j++) { prediction += thetaVector[j] * featureVector[j]; } return prediction; } public double[] getThetas() { return Arrays.copyOf(thetaVector, thetaVector.length); } } 

In order to create a new instance of the LinearRegressionFunction, you must set the theta parameter. The theta parameter, or vector, is used to adapt the generic regression function to the underlying training data. The program's theta parameters will be tuned during the learning process, based on training examples. The quality of the trained target function can only be as good as the quality of the given training data.

Aşağıdaki örnekte LinearRegressionFunction, ev büyüklüğüne göre ev fiyatını tahmin etmek için örneklenecektir. X 0 değerinin sabit 1.0 değeri olması gerektiği düşünülürse, hedef fonksiyon iki teta parametresi kullanılarak somutlaştırılır. Teta parametreleri, bir öğrenme sürecinin çıktısıdır. Yeni örnek oluşturulduktan sonra 1330 metrekare büyüklüğündeki bir evin fiyatı şu şekilde tahmin edilecek:

 // the theta vector used here was output of a train process double[] thetaVector = new double[] { 1.004579, 5.286822 }; LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector); // create the feature vector function with x0=1 (for computational reasons) and x1=house-size Double[] featureVector = new Double[] { 1.0, 1330.0 }; // make the prediction double predictedPrice = targetFunction.apply(featureVector); 

Hedef fonksiyonun tahmin çizgisi aşağıdaki grafikte mavi bir çizgi ile gösterilmektedir. Satır, tüm ev büyüklüğü değerleri için hedef işlevi çalıştırılarak hesaplanmıştır. Grafik ayrıca eğitim için kullanılan fiyat-boyut çiftlerini de içerir.

Gregor Roth

Şimdiye kadar tahmin grafiği yeterince iyi uyuyor gibi görünüyor. Grafik koordinatları (kesişim ve eğim) teta vektörü tarafından tanımlanır { 1.004579, 5.286822 }. Peki bu teta vektörünün uygulamanız için en uygun olduğunu nereden biliyorsunuz? Birinci veya ikinci teta parametresini değiştirirseniz işlev daha uygun olur mu? En iyi uyan teta parametre vektörünü belirlemek için , hedef işlevin ne kadar iyi performans gösterdiğini değerlendirecek bir yardımcı program işlevine ihtiyacınız vardır .

Hedef işlevi puanlama

Makine öğreniminde, belirli bir hedef işlevin ortalama hatasını veya "maliyetini" hesaplamak için bir maliyet işlevi (J (θ)) kullanılır.

Gregor Roth