โจทย์
ต้นไม้ตัดสินใจแบ่งข้อมูลเป็นกลุ่มที่ บริสุทธิ์ มากที่สุด ค่าความไม่บริสุทธิ์ของจีนี วัดว่าป้ายกำกับในกลุ่มปะปนกันแค่ไหน:
Gini = 1 - Σ pₖ²
โดย pₖ คือสัดส่วนป้ายกำกับของคลาส k กลุ่มที่มีคลาสเดียวมีค่าความไม่บริสุทธิ์ 0 กลุ่มที่สองคลาสปนกันเท่าๆ กันมีค่า 0.5
จงเขียน gini_impurity(labels)
อินพุต
labels: ป้ายกำกับคลาสในกลุ่ม
เอาต์พุต
คืนค่าความไม่บริสุทธิ์ของจีนีเป็นเลขทศนิยม
เงื่อนไข
1 ≤ ความยาว ≤ 10,000
แต่ละป้ายกำกับยาว 1 ถึง 20 ตัวอักษร
ตัวอย่าง
อินพุต:
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 ซึ่งเป็นการปะปนสูงสุดของกลุ่มสองคลาส
อินพุต:
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 กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน