- ตัวดำเนินการ
-
เรียนรู้
ศูนย์การเรียนรู้ Python ตัวอย่างที่รันได้, NumPy, pandas และอื่น ๆ ศูนย์การเรียนรู้ C และ C++ พอยน์เตอร์ หน่วยความจำ STL และ C++ สมัยใหม่ ศูนย์การเรียนรู้ C#พื้นฐาน C#, OOP, LINQ, async และแบบฝึกหัด .NET อัลกอริทึม Python การค้นหา การเรียงลำดับ รีเคอร์ชัน และภาพจำลอง O(n) อัลกอริทึม C และ C++ เปรียบเทียบการเขียนด้วย C และ C++
- โจทย์
Naive Bayes สมมติว่าฟีเจอร์เป็นอิสระต่อกันเมื่อรู้คลาสแล้ว และเลือกคลาสที่มีคะแนนสูงที่สุด:
score(c) = P(c) × P(x₁ | c) × P(x₂ | c) × … × P(xₙ | c)
ฟีเจอร์เป็นหมวดหมู่ที่เข้ารหัสเป็นจำนวนเต็ม ประมาณความน่าจะเป็นจากข้อมูลฝึก:
- P(c) = (จำนวนตัวอย่างของคลาส c) / (จำนวนตัวอย่างทั้งหมด)
- P(xⱼ = v | c) = (จำนวนตัวอย่างของคลาส c ที่ฟีเจอร์ j เท่ากับ v + 1) / (จำนวนตัวอย่างของคลาส c + Kⱼ)
โดย Kⱼ คือจำนวนค่าที่ต่างกันของฟีเจอร์ j ในตัวอย่างฝึก และ query ส่วน +1 (การปรับเรียบแบบลาปลาซ) ป้องกันไม่ให้ค่าที่ไม่เคยเห็นทำให้คะแนนเป็น 0
คืนค่าคลาสที่มีคะแนนสูงที่สุด ถ้าคะแนนเท่ากันให้คืนคลาสที่น้อยกว่า การคูณความน่าจะเป็นเล็กๆ จำนวนมากอาจทำให้ค่าเล็กจนปัดเป็นศูนย์ จึงควรบวกลอการิทึมแทน
จงเขียน naive_bayes_predict(features, labels, query)
อินพุต
features: หนึ่งแถวของฟีเจอร์แบบหมวดหมู่ n ตัวต่อตัวอย่างฝึก
labels: คลาสของแต่ละตัวอย่างฝึก
query: ฟีเจอร์ n ตัวของตัวอย่างที่ต้องการจำแนก
เอาต์พุต
คืนค่าคลาสที่ทำนายได้
เงื่อนไข
1 ≤ จำนวนตัวอย่าง ≤ 1,000, 1 ≤ n ≤ 20
0 ≤ ค่าฟีเจอร์และป้ายกำกับแต่ละค่า ≤ 100
ตัวอย่าง
ตัวอย่างที่ 1
อินพุต:
query = [0, 1]
labels = [1, 1, 0, 0, 1]
features = [
[0, 1],
[0, 0],
[1, 1],
[1, 0],
[0, 1]
]
ผลลัพธ์ที่คาดหวัง:
1
คำอธิบาย
คลาส 1 มี 3 ตัวอย่างและคลาส 0 มี 2 ตัวอย่าง ฟีเจอร์ 1 มีค่า {0, 1} (K = 2) ฟีเจอร์ 2 มี {0, 1} (K = 2) score(1) = 3/5 × (3+1)/(3+2) × (2+1)/(3+2) = 0.6 × 0.8 × 0.6 = 0.288 score(0) = 2/5 × (0+1)/(2+2) × (1+1)/(2+2) = 0.4 × 0.25 × 0.5 = 0.05 คลาส 1 ชนะ
ตัวอย่างที่ 2
อินพุต:
query = [2]
labels = [0, 0, 1]
features = [
[0],
[0],
[1]
]
ผลลัพธ์ที่คาดหวัง:
0
คำอธิบาย
ค่า 2 ไม่เคยปรากฏ จึงได้ K = 3 (ค่า 0, 1 และ 2) score(0) = 2/3 × (0+1)/(2+3) ≈ 0.133 และ score(1) = 1/3 × (0+1)/(1+3) ≈ 0.083 ด้วยการปรับเรียบ ไม่มีคะแนนใดเป็น 0 และคลาส 0 ที่พบบ่อยกว่าชนะ
แหล่งอ้างอิง
-
ตัวอย่างที่ 1 ยังไม่ได้รันอินพุต:
query = [0, 1] labels = [1, 1, 0, 0, 1] features = [ [0, 1], [0, 0], [1, 1], [1, 0], [0, 1] ]ผลลัพธ์ที่คาดหวัง:1เอาต์พุตของคุณ -
ตัวอย่างที่ 2 ยังไม่ได้รันอินพุต:
query = [2] labels = [0, 0, 1] features = [ [0], [0], [1] ]ผลลัพธ์ที่คาดหวัง:0เอาต์พุตของคุณ
มี 4 การทดสอบที่ซ่อนอยู่จะถูกรันเมื่อคุณส่งคำตอบ
คอมไพเลอร์และดีบักเกอร์ C# ออนไลน์
เขียน คอมไพล์ รัน และดีบัก C# ออนไลน์ ใช้ breakpoint การทำงานทีละขั้น และการตรวจสอบออบเจ็กต์ใน IDE หลายไฟล์โดยไม่ต้องใช้ Visual Studio
🚀 350,747 การดำเนินการทั้งหมด (1 ในเดือนนี้)
ฝึก C# ด้วยโจทย์เขียนโค้ด
แก้โจทย์จริงใน editor นี้: รันทดสอบตัวอย่าง ส่งคำตอบ และรับรีวิวโค้ดจาก AI
🔷 เกี่ยวกับตัวรัน C# / .NET ออนไลน์นี้
CodeUtility C# Executor ช่วยให้คุณเขียนและรันโค้ด C# จริงได้โดยตรงในเบราว์เซอร์ของคุณ - ไม่ต้องติดตั้ง ไม่ต้องตั้งค่า Visual Studio หรือ .NET SDK ใช้งานผ่านแซนด์บ็อกซ์ที่ปลอดภัยซึ่งรองรับ .NET runtime และเวอร์ชันภาษา C# สมัยใหม่ รวมถึง C# 9 และใหม่กว่านั้น
เครื่องมือนี้ใช้ dotnet-script เบื้องหลังในการคอมไพล์และรันโค้ดของคุณด้วยพฤติกรรม .NET แท้ๆ ทำให้คุณลองเล่นได้ทั้งฟีเจอร์ C# พื้นฐานและขั้นสูง เช่น LINQ, async/await, pattern matching และ generics
คุณสามารถทดสอบสคริปต์ง่ายๆ ฟังก์ชัน และลำดับตรรกะ หรือสำรวจแนวคิดอย่างคลาส โครงสร้าง (structs), การสืบทอด (inheritance) และอินเทอร์เฟซ - ทั้งหมดนี้ในสภาพแวดล้อมการเขียนโค้ดที่สะอาดและปราศจากสิ่งรบกวน
ไม่ว่าคุณกำลังเรียนรู้ C#, ทดสอบอัลกอริทึมหรือทดลองฟีเจอร์ .NET เครื่องมือ CodeUtility C# Executor มอบวิธีที่รวดเร็ว ปลอดภัย และเชื่อถือได้ในการรันโค้ด C# ได้ทันทีจากทุกเบราว์เซอร์
มากกว่าเครื่องมือรันโค้ด
ใช้ตัวแก้ไขหลายไฟล์ เทอร์มินัลประมวลผลแบบแยกส่วน ไลบรารีเฉพาะรันไทม์ พื้นที่ทำงานถาวร การแชร์ และการทำงานร่วมกันแบบเรียลไทม์ได้จากตัวประมวลผลเดียวกัน
วิธีใช้ตัวประมวลผลนี้
เลือกรันไทม์ เปิดหรือสร้างไฟล์ เขียนโค้ด แล้วเลือกเรียกใช้ ผลลัพธ์จะแสดงในเทอร์มินัล ส่วนผู้ใช้ที่ลงชื่อเข้าใช้สามารถเก็บไฟล์ในพื้นที่ทำงาน ติดตั้งไลบรารี และทำงานร่วมกันผ่านการแชร์ได้
- เลือกเวอร์ชันแล้วแก้ไขไฟล์ปัจจุบัน หรือเปิดไฟล์อื่นในพื้นที่ทำงาน
- เรียกใช้โค้ด ป้อนข้อมูลในเทอร์มินัลเมื่อระบบร้องขอ และตรวจสอบประวัติการเรียกใช้ที่บันทึกไว้
- ใช้ไลบรารี เครื่องมือพื้นที่ทำงาน การแชร์ และแชท เมื่องานของคุณต้องใช้โค้ดมากกว่าหนึ่งส่วน
💡 พื้นฐาน C# และตัวอย่างที่คุณลองได้ด้านบน
1. การประกาศตัวแปรและค่าคงที่
C# ใช้การประกาศตัวแปรแบบชนิดชัดเจน (strongly-typed) ใช้ const สำหรับค่าคงที่ตอนคอมไพล์ และ readonly สำหรับค่าคงที่ตอนรันไทม์
int age = 30;
double pi = 3.14159;
char grade = 'A';
string name = "Alice";
bool isActive = true;
// ค่าคงที่
const int MaxUsers = 100;
const string Company = "CodeUtility";
2. เงื่อนไข (if / switch)
ใช้ if, else if และ switch เพื่อควบคุมโฟลว์การทำงาน
int x = 2;
if (x == 1)
{
Console.WriteLine("หนึ่ง");
}
else if (x == 2)
{
Console.WriteLine("สอง");
}
else
{
Console.WriteLine("อื่น ๆ");
}
switch (x)
{
case 1:
Console.WriteLine("หนึ่ง");
break;
case 2:
Console.WriteLine("สอง");
break;
default:
Console.WriteLine("อื่น ๆ");
break;
}
3. ลูป
C# รองรับลูปแบบ for, while และ foreach
for (int i = 0; i < 3; i++)
{
Console.WriteLine(i);
}
int n = 3;
while (n > 0)
{
Console.WriteLine(n);
n--;
}
4. อาเรย์
อาเรย์ใช้เก็บคอลเลกชันขนาดคงที่ของสมาชิกชนิดเดียวกัน
int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[1]);
5. การจัดการรายการ (List)
ใช้ List<T> สำหรับคอลเลกชันที่ยืดหยุ่นได้ (ไดนามิก)
List<int> nums = new List<int> { 1, 2, 3 };
nums.Add(4);
nums.Remove(2);
foreach (int n in nums)
{
Console.Write(n + " ");
}
6. อินพุต/เอาต์พุตคอนโซล
ใช้ Console.WriteLine และ Console.ReadLine สำหรับ I/O พื้นฐาน
Console.Write("กรอกชื่อของคุณ: ");
string name = Console.ReadLine();
Console.WriteLine($"สวัสดี, {name}!");
7. ฟังก์ชัน
กำหนดเมธอดโดยระบุชนิดค่าที่ส่งคืน ชื่อ และพารามิเตอร์
int Add(int a, int b)
{
return a + b;
}
Console.WriteLine(Add(3, 4));
8. ดิกชันนารี
Dictionary<TKey, TValue> ใช้เก็บคู่คีย์-ค่า
Dictionary<string, int> ages = new Dictionary<string, int>();
ages["Alice"] = 30;
Console.WriteLine(ages["Alice"]);
9. การจัดการข้อยกเว้น
จัดการข้อผิดพลาดขณะรันด้วย try, catch, และ finally
try
{
throw new Exception("มีบางอย่างผิดพลาด");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
10. การทำงานกับไฟล์ (File I/O)
ใช้ File และ StreamReader/StreamWriter สำหรับการทำงานกับไฟล์
File.WriteAllText("file.txt", "สวัสดีไฟล์");
string text = File.ReadAllText("file.txt");
Console.WriteLine(text);
11. การจัดการสตริง
สตริงใน C# รองรับเมธอดอย่าง Length, Substring, Contains
string message = "Hello World";
Console.WriteLine(message.Length);
Console.WriteLine(message.Substring(0, 5));
Console.WriteLine(message.Contains("World"));
12. คลาสและออบเจ็กต์
C# รองรับการเขียนโปรแกรมเชิงวัตถุผ่านคลาสและออบเจ็กต์
class Person
{
public string Name;
public Person(string name) => Name = name;
public void Greet() => Console.WriteLine($"สวัสดี ฉันชื่อ {Name}");
}
Person p = new Person("Alice");
p.Greet();