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

แผนผังการตัดสินใจเป็นรูปแบบการเรียนรู้ของเครื่องภายใต้การดูแลที่ใช้สำหรับทั้งงานการจำแนกประเภทและการถดถอย (CART) ง่ายต่อการใช้งาน อธิบาย และเป็นหนึ่งในเครื่องมือการเรียนรู้ของเครื่องที่มีการใช้งานมากที่สุด

ต้นไม้ที่ไม่ใช่ตัวแปร ไม่เชิงเส้นรุ่นหมายความว่าฟังก์ชั่นของพวกเขาสามารถใช้เป็นพารามิเตอร์มากที่สุดเท่าที่จำเป็น(ที่แตกต่างกันกับการถดถอยเชิงเส้นคงที่ใน= ตัดข = ความลาดชัน)และสร้างการทำแผนที่เชิงXไปY

ต้นไม้การจำแนกและการถดถอย (CART)

ต้นไม้การตัดสินใจสามารถแบ่งออกเป็น 2 ประเภท:

  1. ต้นไม้การถดถอย : ต้นไม้ตัดสินใจที่ตัวแปรเป้าหมายสามารถรับค่าต่อเนื่องได้ ( โดยปกติคือตัวเลข )
  2. ต้นไม้การจำแนกประเภท : โมเดลต้นไม้ที่ตัวแปรเป้าหมายใช้ชุดค่าที่ไม่ต่อเนื่อง ( คลาส )
รูปที่ 1 — ต้นไม้การตัดสินใจ

แนวคิดหลัก: ข้อมูลที่ได้รับ (IG)

ต้นไม้การตัดสินใจจะแยกแต่ละปกครองโหนดในสองเด็กโหนดตามคุณลักษณะที่จะประสบความสำเร็จสูงสุดข้อมูลกำไรในขั้นตอนที่ กระบวนการนี้จะเริ่มต้นที่โหนดรูท (การแบ่งครั้งแรก) และจะดำเนินต่อไปจนกว่าโหนดย่อยทั้งหมดจะบริสุทธิ์ หรือจนกว่าข้อมูลที่ได้รับจะเป็น 0 (เว้นแต่เราจะตั้งค่าพารามิเตอร์ "max_depth")

การรับข้อมูลวัดโดยเอนโทรปี (การวัดความไม่บริสุทธิ์หรือความสุ่มของชุดข้อมูล) ลดลงโดยการแยกข้อมูลในคุณสมบัติที่กำหนดและต้นไม้จะขยายกิ่งก้านของมันโดยแยกคุณสมบัติตามลำดับจากการคาดการณ์มากที่สุดไปน้อยที่สุด .

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

ทั้งสองเกณฑ์หลักในการวัดการปนเปื้อนของโหนดผมในชุดข้อมูลที่มีnเรียนแตกต่างกันของความน่าP,เป็นดัชนี Gini:

และเอนโทรปี:

ดัชนี Gini มีแนวโน้มที่จะมีประสิทธิภาพในการคำนวณมากกว่า ดังนั้นจึงมักใช้ในอัลกอริทึมการตัดสินใจ 3 ขั้นตอน สำหรับผู้ที่สนใจทราบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ผมขอแนะนำวิดีโอนี้ สิ่งนี้ช่วยให้ฉันเห็นภาพแนวคิดเบื้องหลังดัชนี Gini และเข้าใจวิธีการทำงานของแบบจำลองต้นไม้ได้ดีขึ้นในที่สุด

การนำแผนผังการจำแนกไปใช้ด้วย Scikit-Learn

ในส่วนถัดไป ฉันจะเขียนโค้ดเพื่อสาธิตการใช้งานแผนผังการจัดหมวดหมู่อย่างง่ายบนชุดข้อมูล Iris ที่เป็นที่รู้จัก เข้าถึงได้ง่ายผ่าน Scikit-Learn และพร้อมที่จะดำเนินการต่อไปนี้:

from sklearn import datasets
iris = datasets.load_iris()

มาเริ่มนำเข้าโมดูลทั้งหมดกันเถอะ:

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

df = pd.read_csv("Desktop/Iris.csv")
print(df)

      
Fig 2— Iris dataset

ในการใช้คุณลักษณะของเรา เราจำเป็นต้องสร้างเมทริกซ์Xโดยที่แต่ละแถวแสดงถึงอินสแตนซ์และทุกคอลัมน์จะมีคุณลักษณะ เราสามารถบรรลุสิ่งนี้ได้ด้วยอาร์เรย์จำนวนน้อยที่นำข้อมูลจากคอลัมน์ที่สนใจแล้วย้ายข้อมูล เรายังต้องสร้างคอลัมน์เวกเตอร์yซึ่งเป็นตัวแปรเป้าหมายของเรา (สายพันธุ์ดอกไม้):

X = np.array([df.SepalLengthCm, df.SepalWidthCm, df.PetalLengthCm, df.PetalWidthCm]).T
y = np.array(df.Species).reshape(-1,1)
print(X.shape) -> Out: (150, 4)
print(y.shape) -> Out: (150, 1)

เมื่อเราจัดเตรียมข้อมูลอย่างดีแล้ว เราสามารถดำเนินการสร้างตัวแยกประเภทการตัดสินใจของเราได้:

dtc = DecisionTreeClassifier(max_depth = 4, random_state=0)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

dtc = dtc.fit(X_train, y_train)

score = dtc.score(X_test, y_test)
print(score) -> Out: 0.9736842105263158

ต้นไม้ของเราหน้าตาประมาณนี้

fn=['sepal length','sepal width ','petal length ','petal width ']
cn=['Setosa', 'Versicolor', 'Virginica']
plt.figure(figsize=(10,10))
tree.plot_tree(dtc, feature_names = fn, class_names=cn, filled = True)

      
Fig 3 — Our classification tree

เมื่อได้รับดอกไม้ใหม่ (ตัวอย่าง) เราน่าจะเริ่มทำนายชนิดของดอกไม้ (คลาส) ได้ดังนี้:

new_flower = np.array([5.5, 2.8, 5, 2]).reshape(1,-1)
prediction = dtc.predict(new_flower)
print(prediction) -> Out: 'Iris-virginica'

ทรีการตัดสินใจสามารถปรับได้ ( ไฮเปอร์พารามิเตอร์ ) เสริมและรวมเข้าด้วยกันเพื่อสร้างฟอเรสต์แบบสุ่ม มันยังไม่จบ…

รหัสไปยังแผนผังการตัดสินใจขั้นพื้นฐาน

เมื่อรวมกันแล้ว รหัสที่จะใช้แผนผังการจัดหมวดหมู่นี้คือ:

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
df = pd.read_csv("Desktop/Iris.csv")
X = np.array([df.SepalLengthCm, df.SepalWidthCm, df.PetalLengthCm, df.PetalWidthCm]).T
y = np.array(df.Species).reshape(-1,1)
dtc = DecisionTreeClassifier(max_depth = 4, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
dtc = dtc.fit(X_train, y_train)
score = dtc.score(X_test, y_test) 
print(score)

Suggested posts

การใช้หน่วยความจำเชื่อมโยง

การใช้หน่วยความจำเชื่อมโยง

เขียนโดย Shashata Sawmya และ Harveer Singh ด้วยการกำเนิดของโครงข่ายประสาทเทียมขนาดใหญ่และความก้าวหน้าทางเทคโนโลยีที่เพิ่มขึ้นเรื่อย ๆ ซึ่งผลักดันวิธีการปัจจุบันไปสู่ขีดจำกัดสัมบูรณ์ จุดสนใจจึงได้สร้างเครื่องมือที่จับได้ทั้งหมดซึ่งมีจุดมุ่งหมายเพื่อทำทุกสิ่ง อย่างไรก็ตาม งานส่วนใหญ่จะไม่ต้องการเครือข่ายเชิงลึกที่เข้มข้นอย่างเหลือเชื่อ แต่ก็ยังมีบางอย่างที่หลากหลายกว่าแบบจำลองทางคณิตศาสตร์พื้นฐาน

วิธีเรียกใช้ปลั๊กอิน ChatGPT ฟรีโดยใช้ Langchain

วิธีเรียกใช้ปลั๊กอิน ChatGPT ฟรีโดยใช้ Langchain

คุณต้องเคยได้ยินเกี่ยวกับปลั๊กอิน ChatGPT อันทรงพลังใหม่ทั้งหมด เช่น เบราว์เซอร์ ตัวแปลรหัส ฯลฯ แต่มีปัญหา การเข้าถึงปลั๊กอินถูกจำกัดไว้เฉพาะรายการรอ และหลายคนไม่สามารถเข้าถึงได้

Related posts

บทสนทนาอันตราย

บทสนทนาอันตราย

หากเราต้องการจะเติบโตบนโลกใบนี้ต่อไป เราจะต้องสนทนาที่อันตราย คนที่ท้าทายสิ่งที่เราทำ สิ่งที่เรากำลังทำ และสิ่งที่เรากำลังจะทำต่อไป (หรือกำลังวางแผนที่จะทำ)

อะไรทำให้พอดคาสต์มีอิทธิพล?

อะไรทำให้พอดคาสต์มีอิทธิพล?

เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์

การแสดงเดี่ยวของสาวผมแดง

เมื่อได้รับมอบหมายจากเฮย์เดน เคธี่ถ่ายคลิปตัวเองช่วยตัวเอง

การแสดงเดี่ยวของสาวผมแดง

หลังเที่ยงคืน Hayden ขับรถพา Katie กลับไปที่หอพักของวิทยาลัยหลังจากพวกเขาอยู่ด้วยกันในตอนเย็น เธอมีเรียนแต่เช้าและไม่มีเสื้อผ้าเปลี่ยนอีกหลังจากค้างกับเขาเมื่อคืนก่อน

การสร้างสภาพแวดล้อมการทำงานที่ปลอดภัย

การสร้างสภาพแวดล้อมการทำงานที่ปลอดภัย

“เขาจะปกป้องฉันเมื่อฉันตกอยู่ในอันตราย เขาจะซ่อนฉันไว้ในเต็นท์ของเขา