İçeriğe geç

Makine Öğrenmesi Eğitim ve Test Verilerinin Ayrılması

Elinizde bulunan bir veri setinden çıkarımda bulunmak için bu veri setini algoritmanız ile test etmelisiniz. Bu test işlemi random şekilde olmalı ki çıkarımda bulunabilelim.

Burada ben yine daha önceden yazmış olduğum sınıfa ek methodlar ekleyerek onun üzerinden devam edeceğim. Gerekli kod aşağıdaki gibi olacaktır.

import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelBinarizer
from sklearn.cross_validation import train_test_split as tts

class VeriSeti():
    def __init__(self, path, sep=';'):
        self.path=path
        self.sep=sep
        self.__readDataSet()
        self.ohe = OneHotEncoder(categorical_features='all')
        self.le=LabelEncoder()
        self.lb=LabelBinarizer()
        self.finishDataSet=None
    
    def __readDataSet(self):
        self.dataset = pd.read_csv(self.path, sep=self.sep)
        
    def CategoryConvert(self, category):
        self.dataFrame=[]
        for y,x in enumerate(category):
            col = self.dataset[[x]].values
            col[:,0] = self.le.fit(col[:,0]).transform(col[:,0])
            col = self.ohe.fit_transform(col).toarray()
            col_data_frame=pd.DataFrame(data=col, index=range(len(col)), columns=list(self.le.classes_))
            self.dataFrame.append(col_data_frame)
        return self.ConcatDataFrame(self.dataFrame)
        
    def BinaryConvert(self, category):
        self.binaryDataFrame=[]
        for y,x in enumerate(category):
            col=self.dataset[[x]].values
            col=self.lb.fit_transform(col)
            col_data_frame=pd.get_dummies(col[:,0], prefix=x)
            self.binaryDataFrame.append(col_data_frame)
        return self.ConcatDataFrame(self.binaryDataFrame)
        
    def ConcatDataFrame(self, dataFrameList):
        if self.finishDataSet is None:
            self.finishDataSet=dataFrameList[0]
            for x in range(len(dataFrameList)-1):
                self.finishDataSet=pd.concat([self.finishDataSet,dataFrameList[x+1]], axis=1)
        else:
            for x in range(len(dataFrameList)):
                self.finishDataSet=pd.concat([self.finishDataSet,dataFrameList[x]], axis=1)
        return self.finishDataSet
        
    def getDataSetCol(self, colName):
        return self.dataset[[colName]].values
        
        
veriSeti=VeriSeti('bank/bank-full.csv')
sonuc=veriSeti.CategoryConvert(['education','marital','contact','poutcome'])
sonuc=veriSeti.BinaryConvert(['housing','default','loan'])
cevir=veriSeti.getDataSetCol('y')
cevir=pd.DataFrame(data=cevir, index=range(len(cevir)), columns=['y'])
x_train, x_test, y_train, y_test=tts(sonuc, cevir, test_size=0.3, random_state=0)
print y_train

Burada ek olarak sadece train_test_split ekledim. Bu bizim için random şekilde verileri ayıracaktır. Kullanımı ise öncelikle ilgili kolonların olduğu data frame veriyoruz. Ama burada sonuçlar yok ona dikkat ediyoruz(sonuç kolonum y kolonu). Test için ayrılacak olan oranı veriyoruz (%30 test, %70 eğitim genelde bu şekilde kullanılmakta).

Burada x_train x kolonunu yani verilerin tutulduğu eğitim kolonunu tutar burada sonuçlar yoktur! x_test test için seçilmiş verileri tutar yine burada sonuç yoktur. y_train ve y_test ise karşılıkları olan sonuçlarını tutarlar. Sadece y kolonunu yani. Bu işlem sonucunda eğitim ve test verilerimiz artık hazır ve kullanılabilir. Anlaşılması zor bir durum söz konusu değil var olan veri setinin random olarak parçalanması durumudur sadece.

Tarih:Makine Öğrenmesi

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir