Python ile AI - Veri Hazırlama

Denetimli ve denetimsiz makine öğrenimi algoritmaları üzerinde zaten çalıştık. Bu algoritmalar, eğitim sürecini başlatmak için biçimlendirilmiş veriler gerektirir. ML algoritmalarına girdi olarak sağlanabilmesi için verileri belirli bir şekilde hazırlamalı veya biçimlendirmeliyiz.

Bu bölüm, makine öğrenimi algoritmaları için veri hazırlamaya odaklanmaktadır.

Verileri Ön İşleme

Günlük hayatımızda birçok veriyle uğraşıyoruz ama bu veriler ham formdadır. Verileri makine öğrenimi algoritmalarının girdisi olarak sağlamak için, onu anlamlı bir veriye dönüştürmemiz gerekir. Veri ön işleme burada devreye giriyor. Diğer basit bir deyişle, verileri makine öğrenme algoritmalarına sağlamadan önce verileri önceden işlememiz gerektiğini söyleyebiliriz.

Veri ön işleme adımları

Verileri Python'da önceden işlemek için şu adımları izleyin -

Step 1 − Importing the useful packages - Python kullanıyorsak, bu, verileri belirli bir biçime, yani ön işleme dönüştürmek için ilk adım olacaktır. Aşağıdaki gibi yapılabilir -

import numpy as np
import sklearn.preprocessing

Burada aşağıdaki iki paketi kullandık -

  • NumPy - Temelde NumPy, küçük çok boyutlu diziler için çok fazla hızdan ödün vermeden büyük çok boyutlu rastgele kayıt dizilerini verimli bir şekilde işlemek için tasarlanmış genel amaçlı bir dizi işleme paketidir.

  • Sklearn.preprocessing - Bu paket, ham özellik vektörlerini makine öğrenimi algoritmaları için daha uygun bir gösterime dönüştürmek için birçok yaygın yardımcı fonksiyon ve dönüştürücü sınıfları sağlar.

Step 2 − Defining sample data - Paketleri içe aktardıktan sonra, bu verilere ön işleme tekniklerini uygulayabilmemiz için bazı örnek veriler tanımlamamız gerekir. Şimdi aşağıdaki örnek verileri tanımlayacağız -

input_data = np.array([2.1, -1.9, 5.5],
                      [-1.5, 2.4, 3.5],
                      [0.5, -7.9, 5.6],
                      [5.9, 2.3, -5.8])

Step3 − Applying preprocessing technique - Bu adımda, ön işleme tekniklerinden herhangi birini uygulamamız gerekiyor.

Aşağıdaki bölüm veri ön işleme tekniklerini açıklamaktadır.

Veri Ön İşleme Teknikleri

Veri ön işleme teknikleri aşağıda açıklanmıştır -

İkilileştirme

Bu, sayısal değerlerimizi Boole değerlerine dönüştürmemiz gerektiğinde kullanılan ön işleme tekniğidir. Aşağıdaki şekilde eşik değeri olarak 0,5'i kullanarak giriş verilerini ikileştirmek için dahili bir yöntem kullanabiliriz -

data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)

Şimdi, yukarıdaki kodu çalıştırdıktan sonra aşağıdaki çıktıyı alacağız, 0.5'in (eşik değeri) üzerindeki tüm değerler 1'e ve 0.5'in altındaki tüm değerler 0'a dönüştürülecektir.

Binarized data

[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]

Ortalama Kaldırma

Makine öğreniminde kullanılan çok yaygın bir başka ön işleme tekniğidir. Temel olarak, özellik vektöründen ortalamayı ortadan kaldırmak için kullanılır, böylece her özellik sıfıra ortalanır. Özellik vektöründeki özelliklerden de önyargıyı kaldırabiliriz. Örnek verilere ortalama kaldırma ön işleme tekniğini uygulamak için aşağıda gösterilen Python kodunu yazabiliriz. Kod, giriş verilerinin Ortalama ve Standart sapmasını gösterecektir -

print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))

Yukarıdaki kod satırlarını çalıştırdıktan sonra aşağıdaki çıktıyı alacağız -

Mean = [ 1.75       -1.275       2.2]
Std deviation = [ 2.71431391  4.20022321  4.69414529]

Şimdi, aşağıdaki kod, giriş verilerinin Ortalama ve Standart sapmasını kaldıracaktır -

data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))

Yukarıdaki kod satırlarını çalıştırdıktan sonra aşağıdaki çıktıyı alacağız -

Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Std deviation = [ 1.             1.             1.]

Ölçeklendirme

Özellik vektörlerini ölçeklendirmek için kullanılan başka bir veri ön işleme tekniğidir. Özellik vektörlerinin ölçeklendirilmesi gereklidir, çünkü her özelliğin değerleri birçok rastgele değer arasında değişebilir. Yani herhangi bir özelliğin sentetik olarak büyük veya küçük olmasını istemediğimiz için ölçeklendirmenin önemli olduğunu söyleyebiliriz. Aşağıdaki Python kodunun yardımıyla, girdi verilerimizin ölçeklendirmesini yapabiliriz, yani özellik vektörü -

# Min max scaling

data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)

Yukarıdaki kod satırlarını çalıştırdıktan sonra aşağıdaki çıktıyı alacağız -

Min max scaled data

[ [ 0.48648649  0.58252427   0.99122807]
[   0.          1.           0.81578947]
[   0.27027027  0.           1.        ]
[   1.          0. 99029126  0.        ]]

Normalleştirme

Özellik vektörlerini değiştirmek için kullanılan başka bir veri ön işleme tekniğidir. Özellik vektörlerini ortak bir ölçekte ölçmek için bu tür bir modifikasyon gereklidir. Aşağıda, makine öğreniminde kullanılabilecek iki tür normalleştirme bulunmaktadır:

L1 Normalization

Aynı zamanda Least Absolute Deviations. Bu tür normalleştirme, değerleri, mutlak değerlerin toplamı her satırda her zaman 1'e kadar olacak şekilde değiştirir. Aşağıdaki Python kodunun yardımıyla giriş verilerine uygulanabilir -

# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)

Yukarıdaki kod satırı aşağıdaki çıktıyı üretir & miuns;

L1 normalized data:
[[ 0.22105263  -0.2          0.57894737]
[ -0.2027027    0.32432432   0.47297297]
[  0.03571429  -0.56428571   0.4       ]
[  0.42142857   0.16428571  -0.41428571]]

L2 Normalization

Aynı zamanda least squares. Bu tür bir normalleştirme, değerleri değiştirir, böylece karelerin toplamı her satırda her zaman 1'e kadar olur. Aşağıdaki Python kodunun yardımıyla giriş verilerine uygulanabilir -

# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)

Yukarıdaki kod satırı aşağıdaki çıktıyı üretecektir -

L2 normalized data:
[[ 0.33946114  -0.30713151   0.88906489]
[ -0.33325106   0.53320169   0.7775858 ]
[  0.05156558  -0.81473612   0.57753446]
[  0.68706914   0.26784051  -0.6754239 ]]

Verilerin Etiketlenmesi

Makine öğrenimi algoritmaları için belirli bir formattaki verilerin gerekli olduğunu zaten biliyoruz. Bir diğer önemli gereklilik ise, verilerin makine öğrenimi algoritmalarının girdisi olarak gönderilmeden önce doğru şekilde etiketlenmesi gerektiğidir. Örneğin sınıflandırma hakkında konuşursak, veriler üzerinde çok sayıda etiket var. Bu etiketler kelimeler, sayılar vb. Biçimindedir. Makine öğrenimiyle ilgili işlevlersklearnverilerin numara etiketlerine sahip olması gerekir. Dolayısıyla, veriler başka bir biçimde ise, o zaman sayılara dönüştürülmelidir. Sözcük etiketlerini sayısal biçime dönüştürme işlemine etiket kodlama denir.

Etiket kodlama adımları

Python'da veri etiketlerini kodlamak için şu adımları izleyin -

Step1 − Importing the useful packages

Python kullanıyorsak, bu, verileri belirli bir biçime, yani ön işleme dönüştürmek için ilk adım olacaktır. Aşağıdaki gibi yapılabilir -

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

Paketleri içe aktardıktan sonra, etiket kodlayıcıyı oluşturup eğitebilmemiz için bazı örnek etiketler tanımlamamız gerekir. Şimdi aşağıdaki örnek etiketleri tanımlayacağız -

# Sample input labels
input_labels = ['red','black','red','green','black','yellow','white']

Step 3 − Creating & training of label encoder object

Bu adımda, etiket kodlayıcıyı oluşturmalı ve onu eğitmeliyiz. Aşağıdaki Python kodu bunu yapmanıza yardımcı olacaktır -

# Creating the label encoder
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

Aşağıdaki Python kodunu çalıştırdıktan sonra çıktı olacaktır -

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

Bu adım, rastgele sıralı listeyi kodlayarak performansı kontrol etmek için kullanılabilir. Aşağıdaki Python kodu aynısını yapmak için yazılabilir -

# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)

Etiketler aşağıdaki gibi yazdırılır -

Labels = ['green', 'red', 'black']

Şimdi, kodlanmış değerlerin listesini, yani sayılara dönüştürülen kelime etiketlerini aşağıdaki gibi alabiliriz -

print("Encoded values =", list(encoded_values))

Kodlanan değerler şu şekilde yazdırılır -

Encoded values = [1, 2, 0]

Step 5 − Checking the performance by decoding a random set of numbers −

Bu adım, rasgele sayı kümesinin kodunu çözerek performansı kontrol etmek için kullanılabilir. Aşağıdaki Python kodu aynısını yapmak için yazılabilir -

# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)

Şimdi, Kodlanmış değerler aşağıdaki gibi yazdırılacaktır -

Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))

Şimdi, kodu çözülen değerler aşağıdaki gibi yazdırılır -

Decoded labels = ['white', 'black', 'yellow', 'green']

Etiketli v / s Etiketsiz Veriler

Etiketlenmemiş veriler temel olarak, dünyadan kolayca elde edilebilen doğal veya insan yapımı nesne örneklerinden oluşur. Bunlara ses, video, fotoğraflar, haber makaleleri vb. Dahildir.

Öte yandan, etiketli veriler bir dizi etiketlenmemiş veriyi alır ve bu etiketlenmemiş verilerin her bir parçasını anlamlı olan bir etiket veya etiket veya sınıfla artırır. Örneğin, bir fotoğrafımız varsa, etiket fotoğrafın içeriğine göre yerleştirilebilir, yani bir erkek veya kız çocuğunun veya hayvanın fotoğrafı veya başka herhangi bir şey. Verilerin etiketlenmesi, belirli bir etiketlenmemiş veri parçası hakkında insan uzmanlığı veya yargı gerektirir.

Etiketlenmemiş verilerin bol olduğu ve kolayca elde edildiği birçok senaryo vardır, ancak etiketlenmiş veriler genellikle bir insan / uzmanın açıklama eklemesini gerektirir. Yarı denetimli öğrenme, daha iyi modeller oluşturmak için etiketli ve etiketlenmemiş verileri birleştirmeye çalışır.