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