บทช่วยสอนงูหลาม

Python HOME แนะนำ Python Python เริ่มต้น ไวยากรณ์หลาม ความคิดเห็นหลาม ตัวแปรหลาม ประเภทข้อมูลหลาม ตัวเลขหลาม Python Casting Python Strings Python Booleans ตัวดำเนินการ Python รายการหลาม Python Tuples ชุดหลาม พจนานุกรม Python Python If...Else Python ในขณะที่ลูป Python สำหรับลูป ฟังก์ชั่นหลาม Python Lambda Python Arrays Python คลาส/วัตถุ มรดกหลาม Python Iterators ขอบเขตหลาม โมดูล Python วันที่หลาม คณิตศาสตร์หลาม Python JSON Python RegEx Python PIP Python ลอง...ยกเว้น อินพุตผู้ใช้ Python การจัดรูปแบบสตริงหลาม

การจัดการไฟล์

การจัดการไฟล์ Python Python อ่านไฟล์ Python เขียน/สร้างไฟล์ Python ลบไฟล์

โมดูล Python

กวดวิชา NumPy เกมส์หมีแพนด้า กวดวิชา Scipy

Python Matplotlib

บทนำ Matplotlib Matplotlib เริ่มต้น Matplotlib Pyplot Matplotlib พล็อต เครื่องหมาย Matplotlib Matplotlib Line ป้ายกำกับ Matplotlib Matplotlib Grid แผนย่อย Matplotlib Matplotlib Scatter Matplotlib บาร์ Matplotlib Histograms Matplotlib แผนภูมิวงกลม

การเรียนรู้ของเครื่อง

เริ่มต้น โหมดค่ามัธยฐาน ส่วนเบี่ยงเบนมาตรฐาน เปอร์เซ็นไทล์ การกระจายข้อมูล การกระจายข้อมูลปกติ พล็อตกระจาย การถดถอยเชิงเส้น การถดถอยพหุนาม การถดถอยพหุคูณ มาตราส่วน รถไฟ/ทดสอบ ต้นไม้การตัดสินใจ

Python MySQL

MySQL เริ่มต้น MySQL สร้างฐานข้อมูล MySQL สร้างตาราง MySQL Insert MySQL Select MySQL Where MySQL สั่งซื้อโดย MySQL Delete MySQL Drop Table MySQL Update MySQL Limit MySQL เข้าร่วม

Python MongoDB

MongoDB เริ่มต้น MongoDB สร้างฐานข้อมูล MongoDB สร้างคอลเล็กชัน MongoDB แทรก MongoDB ค้นหา แบบสอบถาม MongoDB MongoDB Sort MongoDB ลบ MongoDB Drop Collection อัพเดท MongoDB MongoDB Limit

การอ้างอิงหลาม

ภาพรวมของ Python ฟังก์ชันในตัวของ Python Python String Methods Python List Methods วิธีพจนานุกรม Python วิธี Python Tuple Python Set Methods วิธีไฟล์ Python คีย์เวิร์ด Python ข้อยกเว้นของ Python คำศัพท์หลาม

การอ้างอิงโมดูล

โมดูลสุ่ม โมดูลคำขอ โมดูลสถิติ โมดูลคณิตศาสตร์ โมดูล cMath

Python ฮาวทู

ลบรายการที่ซ้ำกัน ย้อนกลับสตริง เพิ่มสองตัวเลข

ตัวอย่าง Python

ตัวอย่าง Python Python Compiler แบบฝึกหัดหลาม แบบทดสอบ Python ใบรับรอง Python

การเรียนรู้ของเครื่อง - โครงสร้างการตัดสินใจ



ต้นไม้การตัดสินใจ

ในบทนี้เราจะแสดงวิธีการสร้าง "แผนภูมิการตัดสินใจ" โครงสร้างการตัดสินใจคือผังงาน และสามารถช่วยคุณตัดสินใจตามประสบการณ์ก่อนหน้านี้

ในตัวอย่างนี้ คนๆ หนึ่งจะพยายามตัดสินใจว่าเขา/เธอควรไปชมการแสดงตลกหรือไม่

โชคดีที่คนตัวอย่างของเราลงทะเบียนทุกครั้งที่มีการแสดงตลกในเมือง และลงทะเบียนข้อมูลบางอย่างเกี่ยวกับตัวตลก และยังลงทะเบียนด้วยว่าเขา/เธอไปหรือไม่

อายุ ประสบการณ์ อันดับ สัญชาติ ไป
36 10 9 สหราชอาณาจักร ไม่
42 12 4 สหรัฐอเมริกา ไม่
23 4 6 นู๋ ไม่
52 4 4 สหรัฐอเมริกา ไม่
43 21 8 สหรัฐอเมริกา ใช่
44 14 5 สหราชอาณาจักร ไม่
66 3 7 นู๋ ใช่
35 14 9 สหราชอาณาจักร ใช่
52 13 7 นู๋ ใช่
35 5 9 นู๋ ใช่
24 3 5 สหรัฐอเมริกา ไม่
18 3 7 สหราชอาณาจักร ใช่
45 9 9 สหราชอาณาจักร ใช่

จากชุดข้อมูลนี้ Python สามารถสร้างโครงสร้างการตัดสินใจที่สามารถใช้ตัดสินว่ารายการใหม่ ๆ ที่ควรค่าแก่การเข้าร่วมหรือไม่



มันทำงานอย่างไร?

ขั้นแรก นำเข้าโมดูลที่คุณต้องการ และอ่านชุดข้อมูลที่มีแพนด้า:

ตัวอย่าง

อ่านและพิมพ์ชุดข้อมูล:

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg

df = pandas.read_csv("shows.csv")

print(df)

ในการสร้างโครงสร้างการตัดสินใจ ข้อมูลทั้งหมดต้องเป็นตัวเลข

เราต้องแปลงคอลัมน์ 'สัญชาติ' และ 'ไป' ที่ไม่ใช่ตัวเลขเป็นค่าตัวเลข

Pandas มีmap()วิธีการนำพจนานุกรมที่มีข้อมูลเกี่ยวกับวิธีการแปลงค่าต่างๆ

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

หมายถึงแปลงค่า 'UK' เป็น 0, 'USA' เป็น 1 และ 'N' เป็น 2

ตัวอย่าง

เปลี่ยนค่าสตริงเป็นค่าตัวเลข:

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)

จากนั้นเราต้องแยก คอลัมน์ คุณลักษณะออกจากคอลัมน์เป้าหมาย

คอลัมน์คุณลักษณะคือคอลัมน์ที่เราพยายามคาดการณ์จากและคอลัมน์เป้าหมายคือคอลัมน์ที่มีค่าที่เราพยายามคาดการณ์

ตัวอย่าง

Xเป็นคอลัมน์คุณลักษณะ yเป็นคอลัมน์เป้าหมาย:

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

ตอนนี้ เราสามารถสร้างโครงสร้างการตัดสินใจที่แท้จริง ให้พอดีกับรายละเอียดของเรา และบันทึกไฟล์ .png ลงในคอมพิวเตอร์:

ตัวอย่าง

สร้างแผนภูมิการตัดสินใจ บันทึกเป็นรูปภาพ และแสดงรูปภาพ:

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')

img=pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()


อธิบายผลลัพธ์

โครงสร้างการตัดสินใจใช้การตัดสินใจก่อนหน้านี้ของคุณในการคำนวณอัตราต่อรองที่คุณต้องการไปพบนักแสดงตลกหรือไม่

ให้เราอ่านแง่มุมต่างๆ ของโครงสร้างการตัดสินใจ:

อันดับ

Rank <= 6.5หมายความว่านักแสดงตลกทุกคนที่มีอันดับ 6.5 หรือต่ำกว่าจะตาม Trueลูกศร (ไปทางซ้าย) และที่เหลือจะตามFalseลูกศร (ทางขวา)

gini = 0.497 หมายถึงคุณภาพของการแยก และจะเป็นตัวเลขระหว่าง 0.0 ถึง 0.5 เสมอ โดยที่ 0.0 จะหมายถึงตัวอย่างทั้งหมดได้ผลลัพธ์เดียวกัน และ 0.5 จะหมายความว่าการแยกนั้นทำตรงกลางพอดี

samples = 13 หมายความว่าตอนนี้มีนักแสดงตลกเหลืออยู่ 13 คนในการตัดสินใจ ซึ่งเป็นทั้งหมดตั้งแต่นี้เป็นขั้นตอนแรก

value = [6, 7] หมายความว่าจากนักแสดงตลกทั้ง 13 คน 6 คนจะได้ "ไม่" และ 7 คนจะได้ "GO"

Gini

มีหลายวิธีในการแยกตัวอย่าง เราใช้วิธี GINI ในบทช่วยสอนนี้

วิธี Gini ใช้สูตรนี้:

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

xจำนวนคำตอบที่เป็นบวก ("GO") คือnจำนวนตัวอย่างและ yจำนวนคำตอบเชิงลบ ("NO") ซึ่งให้การคำนวณนี้แก่เรา:

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

ขั้นตอนต่อไปประกอบด้วยสองกล่อง หนึ่งกล่องสำหรับนักแสดงตลกที่มี 'อันดับ' 6.5 หรือต่ำกว่า และอีกหนึ่งกล่องที่มีส่วนที่เหลือ

ทรู - 5 นักแสดงตลกจบที่นี่:

gini = 0.0 หมายความว่ากลุ่มตัวอย่างทั้งหมดได้ผลลัพธ์เหมือนกัน

samples = 5 หมายความว่ามีนักแสดงตลกเหลืออยู่ 5 คนในสาขานี้ (นักแสดงตลก 5 คนที่มีอันดับ 6.5 หรือต่ำกว่า)

value = [5, 0] หมายความว่า 5 จะได้รับ "ไม่" และ 0 จะได้รับ "GO"

เท็จ - นักแสดงตลก 8 คนดำเนินการต่อ:

สัญชาติ

Nationality <= 0.5 หมายความว่า นักแสดงตลกที่มีสัญชาติน้อยกว่า 0.5 จะเดินตามลูกศรไปทางซ้าย (ซึ่งหมายถึงทุกคนจากสหราชอาณาจักร ) และที่เหลือจะตามลูกศรไปทางขวา

gini = 0.219 หมายความว่าประมาณ 22% ของกลุ่มตัวอย่างจะไปในทิศทางเดียว

samples = 8 หมายความว่ามีนักแสดงตลกเหลืออยู่ 8 คนในสาขานี้ (นักแสดงตลก 8 คนที่มีอันดับสูงกว่า 6.5)

value = [1, 7] หมายถึงนักแสดงตลกทั้ง 8 คนนี้ 1 คนจะได้ "ไม่" และ 7 คนจะได้ "GO"




ทรู - 4 นักแสดงตลก ดำเนินการต่อ:

อายุ

Age <= 35.5 หมายความว่า นักแสดงตลกที่อายุไม่เกิน 35.5 ปีจะตามลูกศรไปทางซ้าย และที่เหลือจะตามลูกศรไปทางขวา

gini = 0.375 หมายความว่าตัวอย่างประมาณ 37,5% จะไปทางเดียว

samples = 4 หมายความว่าสาขานี้มีนักแสดงตลกเหลืออยู่ 4 คน (นักแสดงตลกจากสหราชอาณาจักร 4 คน)

value = [1, 3] หมายความว่าในนักแสดงตลก 4 คนนี้ 1 จะได้รับ "ไม่" และ 3 จะได้รับ "GO"

เท็จ - นักแสดงตลก 4 คนจบที่นี่:

gini = 0.0 หมายความว่ากลุ่มตัวอย่างทั้งหมดได้ผลลัพธ์เหมือนกัน

samples = 4 หมายความว่าสาขานี้มีนักแสดงตลกเหลืออยู่ 4 คน (นักแสดงตลก 4 คนไม่ได้มาจากสหราชอาณาจักร)

value = [0, 4] หมายความว่าในนักแสดงตลก 4 คนนี้ 0 จะได้รับ "ไม่" และ 4 จะได้รับ "GO"




ทรู - 2 นักแสดงตลกจบที่นี่:

gini = 0.0 หมายความว่ากลุ่มตัวอย่างทั้งหมดได้ผลลัพธ์เหมือนกัน

samples = 2 หมายความว่ามีนักแสดงตลก 2 คนในสาขานี้ (นักแสดงตลก 2 คนอายุไม่เกิน 35.5 ปี)

value = [0, 2]หมายถึงนักแสดงตลก 2 คนนี้ 0 จะได้รับ "ไม่" และ 2 จะได้รับ "GO"

เท็จ - นักแสดงตลก 2 คนดำเนินการต่อ:

ประสบการณ์

Experience <= 9.5หมายความว่า นักแสดงตลกที่มีประสบการณ์ 9.5 ปีหรือน้อยกว่านั้นจะตามลูกศรไปทางซ้าย ที่เหลือจะตามลูกศรไปทางขวา

gini = 0.5หมายความว่า 50% ของตัวอย่างจะไปในทิศทางเดียว

samples = 2หมายความว่ามีนักแสดงตลก 2 คนในสาขานี้ (นักแสดงตลกอายุมากกว่า 35.5 2 คน)

value = [1, 1]หมายถึงนักแสดงตลก 2 คนนี้ 1 จะได้รับ "ไม่" และ 1 จะได้รับ "GO"




ทรู - นักแสดงตลก 1 คนสิ้นสุดที่นี่:

gini = 0.0 หมายความว่ากลุ่มตัวอย่างทั้งหมดได้ผลลัพธ์เหมือนกัน

samples = 1หมายความว่าสาขานี้มีนักแสดงตลกเหลืออยู่ 1 คน (นักแสดงตลก 1 คนที่มีประสบการณ์ 9.5 ปีหรือน้อยกว่า)

value = [0, 1]หมายความว่า 0 จะได้รับ "NO" และ 1 จะได้รับ "GO"

เท็จ - นักแสดงตลก 1 คนสิ้นสุดที่นี่:

gini = 0.0 หมายความว่ากลุ่มตัวอย่างทั้งหมดได้ผลลัพธ์เหมือนกัน

samples = 1 แสดงว่าสาขานี้มีนักแสดงตลกเหลืออยู่ 1 คน (นักแสดงตลก 1 คนที่มีประสบการณ์มากกว่า 9.5 ปี)

value = [1, 0] หมายความว่า 1 จะได้รับ "ไม่" และ 0 จะได้รับ "GO"


ทำนายค่า

เราสามารถใช้ Decision Tree เพื่อทำนายค่าใหม่ได้

ตัวอย่าง: ฉันควรไปดูการแสดงที่นำแสดงโดยนักแสดงตลกชาวอเมริกันอายุ 40 ปี มีประสบการณ์ 10 ปี และอันดับตลกอยู่ที่ 7 หรือไม่

ตัวอย่าง

ใช้วิธีทำนาย () เพื่อทำนายค่าใหม่:

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

ตัวอย่าง

คำตอบจะเป็นอย่างไรถ้าอันดับตลกคือ 6?

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


ผลลัพธ์ที่แตกต่าง

คุณจะเห็นว่าแผนภูมิการตัดสินใจให้ผลลัพธ์ที่แตกต่างกัน หากคุณเรียกใช้มันมากพอ แม้ว่าคุณจะป้อนข้อมูลเดียวกันก็ตาม

นั่นเป็นเพราะแผนภูมิการตัดสินใจไม่ได้ให้คำตอบที่แน่นอนแก่เรา 100% ขึ้นอยู่กับความน่าจะเป็นของผลลัพธ์ และคำตอบจะแตกต่างกันไป