İÇERİK

  1. Scikit-Learn ile Makine Öğrenmesine Giriş√
    1. Makine Öğrenmesi: Sorun Belirleme√
    2. Eğitim Seti ve Test Seti√
    3. Örnek Veri Kümesinin Yüklenmesi√
    4. Veri Dizilerinin Şekli√
    5. Harici Veri Kümelerinin Yüklenmesi√
    6. Öğrenme ve Tahmin Etme√
    7. Modelin Parametrelerini Seçme√
    8. Model Tutarlılığı√

Scikit-Learn ile Makine Öğrenmesine Giriş

Makine Öğrenmesi: Sorun Belirleme

Genel olarak, bir öğrenme problemi n tane veri örneği setini inceler ve daha sonra bilinmeyen verilerin özelliklerini öngörmeye çalışır. Her örneğin tek bir sayıdan fazla olması ve örneğin çok boyutlu bir girişi (çok değişkenli veri olarak da bilinir) olması, birkaç öznitelik veya özellik taşıdığı anlamına gelir.
Öğrenme problemlerini birkaç büyük kategoriye ayırabiliriz:
supervised-learning: Verilerin, öngörmek istediğimiz ek niteliklerle birlikte bulunduğu denetlenen öğrenme. Bu problem şöyle olabilir:

Sınıflandırma: örnekler iki veya daha fazla sınıfa aittir ve etiketlenmemiş verilerin sınıfını nasıl öngöreceğimiz önceden etiketli verilerden öğrenmek istiyoruz. Sınıflandırma sorununun bir örneği, her girdi vektörünü sonlu sayıda ayrı kategoriden birine atamak olan el yazısı rakam tanıma örneği olacaktır. Sınıflandırmayı düşünmenin bir başka yolu, sınırlı sayıda kategoriye sahip olan ve her biri verilen n numunesi için doğru kategori veya sınıfla etiketlemeye çalışmaktır.
Regresyon: istenen çıktı bir veya daha fazla sürekli değişken içeriyorsa, görev regresyon olarak adlandırılır. Regresyon sorununun bir örneği, bir somonun yaş ve ağırlığının bir fonksiyonu olarak uzunluğunun tahmini olacaktır.

unsupervised-learning: Eğitim verilerinin karşılık gelen hedef değerler olmaksızın x girdi vektörleri kümesinden oluştuğu denetimsiz öğrenme. Bu tür problemlerin amacı, veri içinde kümeleme olarak adlandırılan benzer örnek grupları keşfetmek veya yoğunluk tahmini olarak bilinen giriş alanındaki verilerin dağılımını belirlemektir.

Eğitim Seti ve Test Seti

Makine öğrenimi, bir veri kümesinin bazı özelliklerini öğrenmek ve bunları yeni verilere uygulamakla ilgilidir. Bu nedenle, bir algoritmayı değerlendirmek için makine öğrenmede verileri iki kümeye ayırmaktır; bunlara, veri örneklerini öğrendiğimize eğitim kümesi ve bunları test ettiğimize test kümesi olarak adlandırırız.

Örnek Veri Kümesinin Yüklenmesi

Scikit-learn birkaç standart veri kümesi ile birlikte geliyor; örneğin sınıflandırma için iris ve basamaklı veri kümeleri ve regresyon için kümes evi fiyatları veri seti.
Aşağıda, kabuğumuzdan bir Python yorumlayıcısı başlatıp, iris ve basamaklı veri kümelerini yükleyeceğiz. Bizim gösterim anlayışımıza göre $ işareti kabuk istemini, >>> ise Python yorumlayıcı komut istemini belirtir:

$ python
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> digits = datasets.load_digits()

Bir veri kümesi, verilere ilişkin tüm verileri ve bazı meta verileri tutan sözlük benzeri bir nesnedir. Bu veriler, bir n_samples, n_features dizisi olan .data üyesinde saklanır. Denetimli problem durumunda, bir veya daha fazla cevap değişkenleri .target üyesinde saklanır. Farklı veri kümeleri hakkında daha ayrıntılı bilgi, ayrılmış bölümde bulunabilir.
Örneğin, basamaklı veri kümesi söz konusu olduğunda, digits.data, sınıflandırmak için kullanılabilecek özelliklere erişim sağlar.

>>> print(digits.data)  
[[  0.   0.   5. ...,   0.   0.   0.]
 [  0.   0.   0. ...,  10.   0.   0.]
 [  0.   0.   0. ...,  16.   9.   0.]
 ...,
 [  0.   0.   1. ...,   6.   0.   0.]
 [  0.   0.   2. ...,  12.   0.   0.]
 [  0.   0.  10. ...,  12.   1.   0.]]

Ve digits.target, basamaklı veri kümesi için zemin gerçeğini verir; öğrenmeye çalıştığımız her basamaklı görüntüye karşılık gelen sayıdır:

>>> digits.target
array([0, 1, 2, ..., 8, 9, 8])

Veri Dizilerinin Şekli

Veriler her zaman 2B boyutlu bir düzende, shape(n_samples, n_features) olup, orijinal verinin farklı bir şekli olabilir. Rakamlar söz konusu olduğunda, her orijinal numune şeklin bir görüntüsüdür (8, 8) ve aşağıdaki yollarla erişilebilir:

>>> digits.images[0]
array([[  0.,   0.,   5.,  13.,   9.,   1.,   0.,   0.],
       [  0.,   0.,  13.,  15.,  10.,  15.,   5.,   0.],
       [  0.,   3.,  15.,   2.,   0.,  11.,   8.,   0.],
       [  0.,   4.,  12.,   0.,   0.,   8.,   8.,   0.],
       [  0.,   5.,   8.,   0.,   0.,   9.,   8.,   0.],
       [  0.,   4.,  11.,   0.,   1.,  12.,   7.,   0.],
       [  0.,   2.,  14.,   5.,  10.,  12.,   0.,   0.],
       [  0.,   0.,   6.,  13.,  10.,   0.,   0.,   0.]])

Harici Veri Kümelerinin Yüklenmesi

Harici bir veri kümesinden yüklemek için lütfen harici veri kümelerini yüklemeye bakın.

Öğrenme ve Tahmin Etme

Rakam datasetinde görev, bir resim göz önüne alındığında, hangi rakamı temsil ettiğini tahmin etmektir. Görünür olmayan örneklerin ait olduğu sınıfları tahmin edebilmek için bir tahminciye uyacağımız 10 olası sınıfın herbirinden (sıfırdan dokuza kadar) örnekler verilir.
Scikit öğrenmede, sınıflandırma için bir tahminci, fit (X, y) ve predict (T) yöntemlerini uygulayan bir Python nesnesidir.
Tahminciye bir örnek, destek vektör sınıflandırmasını uygulayan sınıf sklearn.svm.SVC‘dir. Bir tahmincinin yapıcısı modelin parametrelerini argümanlar olarak alır, ancak şu an için tahminciyi bir kara kutu olarak ele alacağız:

>>> from sklearn import svm
>>> clf = svm.SVC(gamma=0.001, C=100.)

Modelin Parametrelerini Seçme

Bu örnekte, gamma değerini manuel olarak ayarladık. grid search ve cross validation. gibi araçları kullanarak parametreler için iyi değerleri otomatik olarak bulmak mümkündür.

Tahmincimiz örneğini, sınıflandırıcı olduğu için, clf olarak adlandırırız. Şimdi modele uydurulmalıdır, yani modelden öğrenmelidir. Bu, eğitim setimizi fit yöntemine geçirerek yapılır. Bir eğitim seti olarak, son harfler haricindeki veri setimizin tüm görüntülerini kullanalım. Bu eğitim setini digits.data’nın son girdisi hariç hepsini içeren yeni bir dizi üreten [: -1] Python sözdizimi ile seçiyoruz:

>>> clf.fit(digits.data[:-1], digits.target[:-1])  
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma=0.001, kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)

Şimdi, yeni değerleri önerebilirsiniz, özellikle sınıflandırıcıyı eğitmek için kullanmadığımız rakam veri setindeki son resminin rakamını sormalıyız:

>>> clf.predict(digits.data[-1:])
array([8])

İlgili resim şudur:

../../_images/sphx_glr_plot_digits_last_image_001.png

Gördüğünüz gibi, zor bir görevdir: görüntüler zayıf çözünürlüktedir. Sınıflandırıcıya katılıyormusunuz?
Bu sınıflandırma sorununun eksiksiz bir örneği, çalıştırıp inceleyebileceğiniz bir örnek olarak mevcuttur: Elle yazılmış rakamları tanımak.

Model Tutarlılığı

Python’un yerleşik persistans modelini, yani pickle’ı kullanarak scikitte bir modeli kaydetmek mümkündür:

>>> from sklearn import svm 
>>> from sklearn import datasets 
>>> clf = svm.SVC() 
>>> iris = datasets.load_iris() 
>>> X, y = iris.data, iris.target 
>>> clf.fit(X, y) SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,  decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',  max_iter=-1, probability=False, random_state=None, shrinking=True,  tol=0.001, verbose=False) 
>>> import pickle 
>>> s = pickle.dumps(clf) 
>>> clf2 = pickle.loads(s) 
>>> clf2.predict(X[0:1]) array([0]) 
>>> y[0] 0

Referans:

http://scikit-learn.org/stable/tutorial/basic/tutorial.html