การ ตัดสิน ใจ ของ คุณ จะ ช่วย คุณ ให้ ตัดสิน ใจ อย่าง ฉลาด สุขุม ได้ อย่าง ไร?
ต้น ไม้ แห่ง การ ตัดสิน ใจ คือ อะไร?
การ ตัดสิน ใจ ใน เรื่อง นี้ จะ ทํา ให้ คุณ มี ความ สุข มาก ขึ้น
การ ทํา เช่น นี้ จะ ทํา ให้ เกิด การ แบ่ง แยก อย่าง ชัดเจน.
ตาข่าย ที่ คล้อง ความ เข้าใจ
โหนด, สาขา, และ ลา ออก
โหนดรากนี้บรรจุข้อมูลการฝึกซ้อมทั้งหมด โหนดภายในทดสอบคุณสมบัติ และแยกข้อมูลออกเป็น 2 โหนดเด็กได้มากกว่า แบรนซ์คือการเชื่อมต่อที่แสดงถึงผลการทดสอบ โหนดลีฟ (จุดสุดท้าย) โหนดของแผ่น ลีฟ (จุดสุดท้าย) จะแสดงคําทํานายสุดท้าย - คลาสที่นิยมมากที่สุดในการจัดอันดับหรือค่ากลางของการวิเคราะห์
การ แยก ค ริ สติ นา
คุณ ต้อง ทํา อะไร เพื่อ จะ ได้ รับ ความ พอ พระทัย จาก พระเจ้า?
- [FLT: 0] Gini Division - ใช้ในการจัดหมู่เพื่อวัดว่า บ่อยครั้งที่ธาตุที่เลือกอย่างสุ่มจะถูกระบุอย่างไม่ถูกต้อง หากมันถูกระบุอย่างสุ่มตามการกระจายตัวของคลาสในสับเซต. ต่ํากว่ากินนีจะดีกว่า
- [FLT: 0]. entropy - วัดปริมาณของความผิดปกติหรือความไม่แน่นอนในเซต. เป้าหมายคือ การย่อเอนโทรปีหลังจากแยก (inimation get).
- [FLT: 0] การลดความเหลื่อ – ใช้สําหรับต้นไม้ถดถอย คํานวณค่าความแปรผัน (หรือค่าเฉลี่ยกําลังสองของค่าคลาดเคลื่อน) โดยแยก (ค.ศ.
อัลกอริทึมประเมินทุกคุณสมบัติที่เป็นไปได้ และเลือกอันที่มีผลลดความไม่เสมอภาคสูงสุด (หรือได้รับข้อมูล)
การเพิ่มข้อมูลและขยายภาพ
ข้อมูลรายละเอียดต่าง ๆ เป็นความแตกต่างระหว่างความไม่สะอาดของโหนดแม่ กับจํานวนที่เพิ่มน้ําหนักของข้อมูลลูก ๆ ซึ่งเป็นการง่าย ๆ แต่มักชอบคุณสมบัติที่มีประโยชน์หลายอย่าง อัตราส่วนที่เพิ่มขึ้น (ใช้ใน C4. 5) ตรงกับค่านี้ สําหรับบทเรียนนี้ เราจะยึดข้อมูลมาตรฐานที่ได้มาจากความไม่สะอาดของกินนี ซึ่งเป็นการค่าปริยายใน CART (Clasation and Revation At)
การ สร้าง ต้น ไม้ ที่ มี การ ตัดสิน ใจ ที ละ ขั้น
1. เตรียม ข้อมูล
คุณจําเป็นต้องมีชุดข้อมูลที่มีคุณลักษณะและป้ายเป้าหมาย เพื่อให้ง่าย ให้ใช้ข้อมูลประเภทไบนารีที่มีคุณลักษณะตัวเลข เป็นต้น
- [FLT: 0] นักแสดง: อายุ, Income
- [FLT: 0] Target: ตอบรับ (1) หรือ ไม่ accessed (0)
ทํา ความ สะอาด ข้อมูล: จัด การ กับ ค่า นิยม ที่ ขาด ไป, ลบ แบบ จําลอง, และ ทํา ให้ แน่ ใจ ว่า มี ชนิด ของ ตัว เลข.
2. นิยามฟังก์ชันแบ่งกลุ่ม
เราจะดําเนินการความไม่เสมอภาคของกินนี่ ดัชนีของกินนี่สําหรับชุดของรายการคือ
[FLT: 0]
โดย p i เป็นสัดส่วนของรายการในชั้นเรียน I สําหรับแยกไบนารี ภาพรวมของกินนี คือค่าเฉลี่ยน้ําหนักของโหนดเด็ก
3. เติมเต็มการแบ่งเขตแบ่งเขต
สําหรับแต่ละคุณสมบัติ ให้เรียงลําดับค่าที่ซ้ํากัน ทดสอบทุกขีดที่สามารถทําได้ (ค่าแต่ละจุดที่จะเรียงต่อกัน) สําหรับแต่ละค่าแบบการจัดลําดับ โดยแยกข้อมูลออกเป็นกลุ่มด้านซ้ายและขวา, คํานวณค่าของกินนี และติดตามการแยกที่ดีที่สุด
4 สร้าง ต้น ไม้ ขึ้น ใหม่
สร้างฟังก์ชันที่จะใช้ข้อมูลและความลึกปัจจุบัน โดยมันตรวจสอบเงื่อนไขการหยุด (เช่น ระดับความลึกสูงสุดที่ถึง, อัตราการมากที่สุดต่อโหนด, หรือไม่มีการรับข้อมูล) หากพบเงื่อนไข ก็จะสร้างโหนดใบร่วมกับกลุ่มผู้ใช้ทั่วไป มิฉะนั้น จะหาส่วนที่ดีที่สุดและสร้างโหนดภายในขึ้น แล้วเรียกฟังก์ชันทั้งด้านซ้ายและขวา โดยสลับที่ใหม่กว่า
5: พระ เยซู บอก ล่วง หน้า ว่า “คน ที่...
เมื่อ ต้น ไม้ ถูก สร้าง แล้ว การ ทํานาย ก็ เป็น อย่าง ตรง ไป ตรง มา: เริ่ม ต้น ที่ ราก ไม้, ตาม กิ่ง ไม้, โดย ประเมิน ดู ผล การ ทดสอบ ลักษณะ ของ ต้น ใหม่, และ ตอบ สนอง คุณค่า ของ ใบ ที่ คุณ วาง ไว้.
การ เพิ่ม เต็ม ที่ ใน ภาษา ไพ โอ เนียร์
ด้านล่างนี้เป็นคู่มือที่สมบูรณ์และมีผลน้อยที่สุดของการตัดสินใจต้นไม้เพื่อจําแนกประเภทโดยใช้ความไม่เสมอภาคของกินนี
import numpy as np
from collections import Counter
class DecisionTree:
def __init__(self, max_depth=None, min_samples_split=2):
self.max_depth = max_depth
self.min_samples_split = min_samples_split
self.tree = None
def fit(self, X, y):
dataset = np.column_stack((X, y))
self.tree = self._grow_tree(dataset)
def _grow_tree(self, dataset, depth=0):
X, y = dataset[:, :-1], dataset[:, -1]
n_samples, n_features = X.shape
n_labels = len(np.unique(y))
# Stopping conditions
if (n_labels == 1 or depth == self.max_depth or n_samples < self.min_samples_split):
leaf_value = Counter(y).most_common(1)[0][0]
return {'leaf': True, 'value': leaf_value}
best_feature, best_threshold = self._best_split(dataset, n_features)
if best_feature is None:
leaf_value = Counter(y).most_common(1)[0][0]
return {'leaf': True, 'value': leaf_value}
left_idx, right_idx = self._split(dataset[:, best_feature], best_threshold)
left_subtree = self._grow_tree(dataset[left_idx], depth+1)
right_subtree = self._grow_tree(dataset[right_idx], depth+1)
return {'leaf': False,
'feature': best_feature,
'threshold': best_threshold,
'left': left_subtree,
'right': right_subtree}
def _best_split(self, dataset, n_features):
best_gini = float('inf')
best_feature, best_threshold = None, None
for feature in range(n_features):
thresholds = np.unique(dataset[:, feature])
for i in range(len(thresholds)-1):
thresh = (thresholds[i] + thresholds[i+1]) / 2
left_idx, right_idx = self._split(dataset[:, feature], thresh)
if len(left_idx) == 0 or len(right_idx) == 0:
continue
gini = self._gini_gain(dataset, left_idx, right_idx)
if gini < best_gini:
best_gini = gini
best_feature = feature
best_threshold = thresh
return best_feature, best_threshold
def _split(self, values, threshold):
left_idx = np.where(values <= threshold)[0]
right_idx = np.where(values > threshold)[0]
return left_idx, right_idx
def _gini_gain(self, dataset, left_idx, right_idx):
total = len(left_idx) + len(right_idx)
gini_left = self._gini(dataset[left_idx, -1])
gini_right = self._gini(dataset[right_idx, -1])
return (len(left_idx)/total) * gini_left + (len(right_idx)/total) * gini_right
def _gini(self, labels):
_, counts = np.unique(labels, return_counts=True)
p = counts / np.sum(counts)
return 1 - np.sum(p**2)
def predict(self, X):
return np.array([self._predict_row(x, self.tree) for x in X])
def _predict_row(self, x, node):
if node['leaf']:
return node['value']
if x[node['feature']] <= node['threshold']:
return self._predict_row(x, node['left'])
else:
return self._predict_row(x, node['right'])
การ ทดสอบ ต้น ไม้
ใช้ชุดข้อมูลแบบง่าย เช่น ชุดข้อมูลกิริสแบบคลาสสิค (คุณสมบัติ 2 อย่างสําหรับการจัดประเภทไบนารี) [FLT: 0] สืบค้นข้อมูลไอริส [FLT: 1) ใช้ได้ดี เปรียบความแม่นยําของต้นไม้ของคุณกับ Scietchching (FLT: 2) เพื่อตรวจสอบความถูกต้อง
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
data = load_iris()
X = data.data[:100] # take only first two classes (binary)
y = data.target[:100]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
tree = DecisionTree(max_depth=3)
tree.fit(X_train, y_train)
preds = tree.predict(X_test)
accuracy = np.mean(preds == y_test)
print(f'Accuracy: {accuracy:.2f}')
เทคโนโลยี ที่ ก้าว หน้า เพื่อ ปรับ ปรุง ต้น ไม้ ของ คุณ
การ มุ่ง มั่น จะ หลีก เลี่ยง การ ทํา เกิน สิทธิ์
ต้น ไม้ ที่ โต เต็ม ที่ สามารถ จด จํา เสียง รบกวน ใน ข้อมูล การ ฝึก อบรม ได้.
การ จัด การ อย่าง สม่ําเสมอ และ เป็น ระเบียบ
สําหรับคุณสมบัติที่ต่อเนื่อง เราใช้จุดกึ่งกลางระหว่างค่าการเรียงตัว (เช่น calcial actric activity) แต่ละประเภทสามารถกลายเป็นสาขาที่แยกได้ (Multisway section) หรือคุณสามารถแยกได้สองส่วน ส่วนนี้ส่วนใหญ่จะเป็นรูปแบบพิเศษ (เช่น ScikiTH) ใช้แม้กระทั่งส่วนต่าง ๆ ของเซลล์ในการจัดองค์ประกอบกํากับด้วยการจัดองค์ประกอบกํากับ
การ จัด การ กับ ค่า นิยม ที่ ขาด ไป
ข้อมูลเรียลลิเวิร์ลมักขาดค่าไป วิธีง่ายๆ คือ กําหนดค่าที่ขาดหายไป
การ เปรียบ เทียบ กับ การ อ่าน เพิ่ม เติม
2557) ขณะที่อาคารก่อสร้างจากจุดเริ่มสร้างเป็นระบบการศึกษา ระบบการผลิตใช้ห้องสมุด เช่น Sciikitchchchchchie ซึ่งจัดทําอุปกรณ์ C ที่จัดทําโดยดีทีดี (FLT:0). คุณสามารถช่วยเรียนรู้ได้เพิ่มเติมจากข้อมูล [FLT: 0]. สืบค้นเมื่อพิมพ์เอกสารการตัดสินใจเกี่ยวกับต้นไม้ [FLT: 1). สําหรับทฤษฎีที่ลึกขึ้น, หนังสือ "ธาตุของการเรียนการสอนแบบสัตตาสติต" โดย แฮตตี, ทิปชีรมานี, และฟรีดแมนเป็นทรัพยากรที่มีประสิทธิภาพยิ่ง. ต้นฉบับโดย Bartamman al.
รูปแบบการวน
การสร้างต้นไม้จากรอยขีดข่วน ทําให้เกิดอัลกอริทึมพื้นฐานที่สุดในการเรียนรู้ของเครื่อง คุณได้เรียนรู้ว่ากระบวนการแยกแบบง่ายๆ