โจทย์ทั้งหมด
ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

ค่าความไม่บริสุทธิ์ของจีนี

วัดว่าป้ายกำกับในกลุ่มปะปนกันแค่ไหน ซึ่งเป็นคะแนนที่ต้นไม้ตัดสินใจใช้เลือกการแบ่ง

สิ่งที่คุณจะได้เรียนรู้

  • วัดว่ากลุ่ม label ปนกันแค่ไหน
  • นับสัดส่วนของแต่ละคลาส
  • เข้าใจว่าต้นไม้เลือกการแบ่งอย่างไร

โจทย์

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

Gini = 1 - Σ pₖ²

โดย pₖ คือสัดส่วนป้ายกำกับของคลาส k กลุ่มที่มีคลาสเดียวมีค่าความไม่บริสุทธิ์ 0 กลุ่มที่สองคลาสปนกันเท่าๆ กันมีค่า 0.5

จงเขียน gini_impurity(labels)

อินพุต

labels: ป้ายกำกับคลาสในกลุ่ม

เอาต์พุต

คืนค่าความไม่บริสุทธิ์ของจีนีเป็นเลขทศนิยม

เงื่อนไข

1 ≤ ความยาว ≤ 10,000

แต่ละป้ายกำกับยาว 1 ถึง 20 ตัวอักษร

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
labels = ["yes", "yes", "no", "no"]

ผลลัพธ์ที่คาดหวัง:
expected = 0.5
อินพุต:
std::vector<std::string> labels = {"yes", "yes", "no", "no"};

ผลลัพธ์ที่คาดหวัง:
double expected = 0.5;
อินพุต:
string[] labels = new string[] {"yes", "yes", "no", "no"};

ผลลัพธ์ที่คาดหวัง:
double expected = 0.5;

คำอธิบาย

ครึ่งหนึ่งเป็น yes อีกครึ่งเป็น no: 1 - (0.5² + 0.5²) = 1 - 0.5 = 0.5 ซึ่งเป็นการปะปนสูงสุดของกลุ่มสองคลาส

ตัวอย่างที่ 2
อินพุต:
labels = ["cat", "cat", "cat"]

ผลลัพธ์ที่คาดหวัง:
expected = 0.0
อินพุต:
std::vector<std::string> labels = {"cat", "cat", "cat"};

ผลลัพธ์ที่คาดหวัง:
double expected = 0.0;
อินพุต:
string[] labels = new string[] {"cat", "cat", "cat"};

ผลลัพธ์ที่คาดหวัง:
double expected = 0.0;

คำอธิบาย

มีคลาสเดียว: 1 - 1² = 0 กลุ่มนี้บริสุทธิ์

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

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

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก