Qaror daraxti



ULASHISH

Qaror daraxti

Ushbu bobda biz sizga qanday qilib "Qaror daraxti"ni yasashni ko‘rsatamiz. Qarorlar daraxti - bu oqim diagrammasi va oldingi tajribaga asoslanib qaror qabul qilishingizga yordam beradi.

Misolda, bir kishi komediya tomoshasiga borish kerakmi yoki yo‘qmi, qaror qabul qilishga harakat qiladi.

Yaxshiyamki, namunali odamimiz har safar shaharda komediya ko‘rsatuvi bo‘lsa, ro‘yxatdan o‘tadi va hajvchi haqida ma’lumotni ro‘yxatdan o‘tkazadi, shuningdek, u bor yoki yo‘qligini ham ro‘yxatdan o‘tkazadi.

Yosh Tajriba Daraja Millati Go
36 10 9 UK NO
42 12 4 USA NO
23 4 6 N NO
52 4 4 USA NO
43 21 8 USA YES
44 14 5 UK NO
66 3 7 N YES
35 14 9 UK YES
52 13 7 N YES
35 5 9 N YES
24 3 5 USA NO
18 3 7 UK YES
45 9 9 UK YES

Endi, ushbu ma’lumotlar to‘plamiga asoslanib, Python har qanday yangi shoularga tashrif buyurishga arziydimi yoki yo‘qligini hal qilish uchun ishlatilishi mumkin bo‘lgan qarorlar daraxtini yaratishi mumkin.



U qanday ishlaydi?

Birinchidan, ma’lumotlar to‘plamini pandalar bilan o‘qing:

Misol

Ma’lumotlar to‘plamini o‘qing va chop eting:

import pandas df = pandas.read_csv("data.csv") print(df)

Misolni ishga tushirish »

Qaror daraxtini yaratish uchun barcha ma’lumotlar sonli bo‘lishi kerak.

"Milliyat" va "O‘tish" sonli bo‘lmagan ustunlarni raqamli qiymatlarga aylantirishimiz kerak.

Pandas map() usuliga ega bo‘lib, u qiymatlarni qanday aylantirish haqida ma’lumotga ega dictionary oladi.

{'UK': 0, 'USA': 1, 'N': 2}

"Buyuk Britaniya" qiymatlarini 0 ga, "AQSh" ni 1 ga va "N" ni 2 ga aylantiradi.

Misol

String qiymatlarini raqamli qiymatlarga o‘zgartiring:

d = {'UK': 0, 'USA': 1, 'N': 2} df['Nationality'] = df['Nationality'].map(d) d = {'YES': 1, 'NO': 0} df['Go'] = df['Go'].map(d) print(df)

Misolni ishga tushirish »

Keyin xususiyat ustunlarini maqsadli ustundan ajratishimiz kerak.

Xususiyat ustunlari biz bashorat qilishga harakat qiladigan ustunlar, maqsadli ustun esa biz taxmin qilmoqchi bo‘lgan qiymatlar ustunidir.

Misol

X - xususiyat ustunlari, y - maqsad ustun:

features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] print(X) print(y)

Misolni ishga tushirish »

Endi biz haqiqiy qaror daraxtini yaratishimiz mumkin, uni tafsilotlarimizga moslashtiramiz. Bizga kerak bo‘lgan modullarni import qilishdan boshlang:

Misol

Qarorlar daraxtini yaratish va ko‘rsatish:

import pandas from sklearn import tree from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt df = pandas.read_csv("data.csv") d = {'UK': 0, 'USA': 1, 'N': 2} df['Nationality'] = df['Nationality'].map(d) d = {'YES': 1, 'NO': 0} df['Go'] = df['Go'].map(d) features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] dtree = DecisionTreeClassifier() dtree = dtree.fit(X, y) tree.plot_tree(dtree, feature_names=features)

Misolni ishga tushirish »


Natija tushuntirildi

Qarorlar daraxti komediyachini ko‘rishni xohlash yoki qilmaslik ehtimolini hisoblash uchun oldingi qarorlaringizdan foydalanadi.

Keling, qaror daraxtining turli jihatlarini o‘qib chiqamiz:

Daraja

Rank <= 6.56,5 yoki undan past darajaga ega bo‘lgan har bir komediyachi True strelkasi (chapda), qolganlari esa False strelkasi (o‘ngda) bo‘lishini anglatadi.

gini = 0.497 bo‘linish sifatiga ishora qiladi va har doim 0,0 dan 0,5 gacha bo‘lgan raqam bo‘lib, bu yerda 0,0 barcha namunalar bir xil natijaga erishganligini va 0,5 bo‘linish aynan o‘rtada amalga oshirilganligini bildiradi.

samples = 13 qarorning shu nuqtasida 13 nafar komediyachi qolganligini bildiradi, bularning barchasi birinchi qadam bo‘lgani uchun.

value = [6, 7] shuni anglatadiki, bu 13 nafar komediyachidan 6 nafari "YO‘Q", 7 nafari "GO" oladi.

Jini

Namunalarni ajratishning ko‘plab usullari mavjud, biz ushbu qo‘llanmada GINI usulidan foydalanamiz.

Gini usuli quyidagi formuladan foydalanadi:

Gini = 1 - (x/n)2 - (y/n)2

Bu yerda x - ijobiy javoblar soni ("GO"), n - namunalar soni va y - salbiy javoblar soni ("YO‘Q"), bu bizga ushbu hisobni beradi:

1 - (7 / 13)2 - (6 / 13)2 = 0.497

Keyingi bosqichda ikkita quti, 6,5 yoki undan past darajali komediyachilar uchun bitta quti va qolganlari bilan bitta quti mavjud.

To‘g‘ri - 5 komediyachi shu erda tugaydi:

gini = 0.0 barcha namunalar bir xil natijaga erishganligini bildiradi.

samples = 5 bu filialda 5 nafar komediyachi qolganligini bildiradi (6,5 yoki undan past darajali 5 komediyachi).

value = [5, 0]5 ta "YO‘Q", 0 esa "GO" ni olishini bildiradi.

False - 8 komediyachi davom etadi:

Millati

Nationality <= 0.5 millati qiymati 0,5 dan kam bo‘lgan komediyachilar chapdagi strelka (ya’ni Buyuk Britaniyadan kelgan barchani anglatadi) va qolganlari o‘ngdagi o‘qni kuzatib borishini anglatadi.

gini = 0.219 namunalarning taxminan 22% bir yo‘nalishda ketishini anglatadi.

samples = 8 bu filialda 8 ta komediyachi qolganligini bildiradi (6,5 dan yuqori 8 komediyachi).

value = [1, 7] shuni anglatadiki, bu 8 nafar komediyachidan 1 nafari "YO‘Q" va 7 nafari "GO" oladi.




To‘g‘ri - 4 komediyachi davom etadi:

Yosh

Age <= 35.535,5 va undan kichik yoshdagi komediyachilar chapdagi o‘qni, qolganlari esa o‘ngdagi o‘qni kuzatib borishini anglatadi.

gini = 0.375 namunalarning taxminan 37,5% bir yo‘nalishda ketishini anglatadi.

samples = 4 bu filialda 4 nafar komediyachi qolganligini bildiradi (Buyuk Britaniyadan 4 nafar komediyachi).

value = [1, 3] shuni anglatadiki, bu 4 nafar komediyachidan 1 nafari "YO‘Q" va 3 nafari "GO" oladi.

False - 4 Komediyachi shu erda tugaydi:

gini = 0.0 barcha namunalar bir xil natijaga erishganligini bildiradi.

samples = 4 bu filialda 4 nafar komediyachi qolganligini bildiradi (4 nafar komediyachi Buyuk Britaniyadan emas).

value = [0, 4] shuni anglatadiki, bu 4 nafar komediyachidan 0 nafari "YO‘Q" va 4 nafari "GO" oladi.




To‘g‘ri - 2 komediyachi shu erda tugaydi:

gini = 0.0 barcha namunalar bir xil natijaga erishganligini bildiradi.

samples = 2 bu filialda 2 nafar komediyachi qolganligini bildiradi (2 nafar 35,5 yosh va undan kichik).

value = [0, 2] shuni anglatadiki, bu 2 ta komediyachidan 0 nafari "YO‘Q" va 2 nafari "GO" oladi.

False - 2 Komediyachi Davom etadi:

Tajriba

Experience <= 9.5 shuni anglatadiki, 9,5 yil yoki undan kam tajribaga ega komediyachilar chapdagi o‘qni, qolganlari esa o‘ngdagi o‘qni kuzatib boradilar.

gini = 0.5 namunalarning 50% bir yo‘nalishda ketishini anglatadi.

samples = 2 bu filialda 2 nafar komediyachi qolganligini bildiradi (35,5 yoshdan katta 2 nafar komediyachi).

value = [1, 1] shuni anglatadiki, bu 2 nafar komediyachidan 1 nafari "YO‘Q" va 1 nafari "GO" oladi.




To‘g‘ri - 1 komediyachi shu erda tugaydi:

gini = 0.0 barcha namunalar bir xil natijaga erishganligini bildiradi.

samples = 1 bu filialda 1 nafar komediyachi qolganligini bildiradi (9,5 yil va undan kam tajribaga ega 1 nafar komediyachi).

value = [0, 1]0 "YO‘Q" va 1 "GO" olishini bildiradi.

False - 1 komediyachi shu yerda tugaydi:

gini = 0.0 barcha namunalar bir xil natijaga erishganligini bildiradi.

samples = 1 bu filialda 1 nafar komediyachi qolganligini bildiradi (9,5 yildan ortiq tajribaga ega 1 nafar komediyachi).

value = [1, 0]1 "YO‘Q" va 0 "GO" olishini bildiradi.


Qiymatlarni bashorat qilish

Biz qarorlar daraxtidan yangi qiymatlarni bashorat qilish uchun foydalanishimiz mumkin.

Misol: 40 yoshli amerikalik komediyachi, 10 yillik tajribaga ega va komediya reytingi 7 bo‘lgan shouni ko‘rishim kerakmi?

Misol

Yangi qiymatlarni bashorat qilish uchun tahmin() usulidan foydalaning:

print(dtree.predict([[40, 10, 7, 1]]))

Misolni ishga tushirish »

Misol

Agar komediya darajasi 6 bo‘lsa, javob nima bo‘lar edi?

print(dtree.predict([[40, 10, 6, 1]]))

Misolni ishga tushirish »


Turli natijalar

Agar siz uni bir xil ma’lumotlar bilan oziqlantirsangiz ham, agar siz uni yetarlicha marta ishlatsangiz, qarorlar daraxti sizga turli xil natijalar berishini ko‘rasiz.

Buning sababi, Qaror daraxti bizga 100% aniq javob bermaydi. Bu natija ehtimoliga asoslanadi va javob har xil bo‘ladi.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!