(Yapay Zeka Alıştırması) Cam Türü Sınıflandırılması - Lojistik Regresyon, Karar Ağacı(CART)

 Herkese merhabalar, glass dataseti kullanılarak cam türü sınıflandırma probleminin çözümü için hazırladığım python kodları aşağıda yer almaktadır.Satırlarda gerekli açıklamalar bulunmaktadır, takıldığınız noktalar için iletişime geçebilirsiniz.Güvenli günler dilerim.


# -*- coding: utf-8 -*-
"""
Emre Hüseyinkahyaoğlu 
"""

import pandas as pds  #Veri okuma işlemi için
from sklearn.model_selection import train_test_split # eğitim ve test datasını ayırmak için
from sklearn.tree import DecisionTreeClassifier # karar ağacı için
from sklearn.metrics import accuracy_score # skorlama işlemi için
from sklearn import preprocessing # normalize işlemi için
from sklearn.externals.six import StringIO # görsel kısım için
from IPython.display import Image # görsel kısım için
from sklearn.tree import export_graphviz # görsel kısım için
import pydotplus # görsel kısım için
from sklearn.metrics import mean_squared_error # CART için
import math # CART için
from sklearn.linear_model import LogisticRegression # Lojistik Regresyon modelleme için
#Graphviz.py yi kendi dizininde bulamadığından
#ötürü kendim yüklediğim graphvizin yolunu gösteriyorum
import os      # graphvizin yolu ile alakalı yaşadığım sıkıntıyı gidermek adına işletim sistemi kütüphanesi
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

# Dosya import ediyorum
veri= pds.read_csv("glass.csv")
#hedef değişkenime 11. satırda olan Type yani cam tipini atıyorum
hedef=veri["Type"]
#hedef değişkenimi veri setimden başka bir değişkene parse ettiğim için kaldırıyorum.
veri= veri.drop("Type",axis=1)

#normalize 

temp=veri.values
minMaxScaler=preprocessing.MinMaxScaler()
tempScaled=minMaxScaler.fit_transform(temp)
veri=pds.DataFrame(tempScaled)

# eğitim ve test datasınının ayrılması

xEgitim,xTest,yEgitim,yTest = train_test_split(veri,hedef,test_size=0.30,random_state=70)
# ID3 Karar Ağacı algoritması ile tahmin işlemine geçiyorum.ID3 algoritması
# entropiden faydalanarak sınıflandırma problemlerini çözdüğünden ötürü
# burada varsayılan kriter olan gini yerine  entropy kullanıyorum.


dts=DecisionTreeClassifier(criterion="entropy")
dts=dts.fit(xEgitim,yEgitim)
hedefPred=dts.predict(xTest)
dtsSonuc=accuracy_score(yTest,hedefPred)
print("Karar ağacı ile :" , dtsSonuc)
#görsel kısım

cN = ['bwfp','bwnfp','vwfp','vwnfp','containers','tableware','headlamps']
fN = ['RI','NA','MG','AL','SI','K','CA','BA','FE']
gorsel1=StringIO()
export_graphviz(dts,out_file=gorsel1,filled=True,rounded=True,feature_names = fN,class_names=cN ,special_characters=True)
grafik=pydotplus.graph_from_dot_data(gorsel1.getvalue())
Image(grafik.create_png())
grafik.write_png("glassID3.png")

#Logistic Regression 

dts1= LogisticRegression(random_state=0,solver='lbfgs',multi_class='multinomial').fit(xEgitim,yEgitim)
regresSonuc=dts1.score(xTest,yTest)
print("Lojistik Regresyon ile : " , regresSonuc)



#CART(Sınıflandırma ve Karar ağaçları yöntemi ile)

dts2 = DecisionTreeClassifier()
dts2.fit(xEgitim,yEgitim)
hedefPred2=dts2.predict(xTest)
dogrulukSkor=accuracy_score(yTest,hedefPred2)
kareselHata=mean_squared_error(yTest,hedefPred2)
kareOrtKareKok=math.sqrt(kareselHata)
print("CART : ",dogrulukSkor,kareselHata,kareOrtKareKok)

#CART Görselleştirme

gorsel2=StringIO()
export_graphviz(dts2,out_file=gorsel2,filled=True,rounded=True,feature_names = fN,class_names=cN,special_characters=True)
grafik2=pydotplus.graph_from_dot_data(gorsel2.getvalue())
Image(grafik2.create_png())
grafik2.write_png("glassCART.png")


CART görselleştirme kısmından elde ettiğimiz görsel çıktı aşağıda yer almaktadır.





Hiç yorum yok:

Yorum Gönder