ดังที่ฉันเข้าใจ k-NN เป็นอัลกอริทึมสำหรับผู้เรียนที่ขี้เกียจและไม่จำเป็นต้องมีขั้นตอนการฝึกอบรม เหตุใดเราจึงต้องใช้.fit()
กับ sklearn และจะเกิดอะไรขึ้นเมื่อเราใช้
ดังที่ฉันเข้าใจ k-NN เป็นอัลกอริทึมสำหรับผู้เรียนที่ขี้เกียจและไม่จำเป็นต้องมีขั้นตอนการฝึกอบรม เหตุใดเราจึงต้องใช้.fit()
กับ sklearn และจะเกิดอะไรขึ้นเมื่อเราใช้
คำตอบ:
ในระดับแนวคิด
การติดตั้งลักษณนามหมายถึงการรับชุดข้อมูลเป็นอินพุตจากนั้นส่งเอาต์พุตลักษณนามซึ่งเลือกจากพื้นที่ของลักษณนามที่เป็นไปได้ ในหลายกรณีตัวจําแนกถูกระบุ - นั่นคือแตกต่างจากลักษณนามอื่น ๆ ที่เป็นไปได้ - โดยชุดของพารามิเตอร์ โดยทั่วไปแล้วพารามิเตอร์จะถูกเลือกโดยการแก้ปัญหาการเพิ่มประสิทธิภาพหรือขั้นตอนเชิงตัวเลขอื่น ๆ แต่ในกรณีของ knn ตัวจําแนกถูกระบุโดยข้อมูลการฝึกอบรม ดังนั้นในระดับนามธรรมการปรับลักษณนามลักษณนามเพียงแค่ต้องการเก็บชุดการฝึกอบรม
ในระดับการใช้งาน
การประเมินลักษณนามของ KNN ในจุดข้อมูลใหม่นั้นต้องการการค้นหาเพื่อนบ้านที่ใกล้ที่สุดในชุดฝึกอบรมซึ่งอาจเป็นการทำงานที่มีราคาแพงเมื่อชุดฝึกอบรมมีขนาดใหญ่ ดังที่ RUser ได้กล่าวไว้มีเทคนิคต่าง ๆ เพื่อเพิ่มความเร็วในการค้นหาซึ่งโดยทั่วไปแล้วจะทำงานโดยการสร้างโครงสร้างข้อมูลต่าง ๆ ตามชุดการฝึกอบรม แนวคิดทั่วไปคืองานคอมพิวเตอร์บางอย่างที่จำเป็นในการจำแนกคะแนนใหม่นั้นเป็นเรื่องธรรมดาทั่วทั้งจุด ดังนั้นงานนี้สามารถทำได้ล่วงหน้าและนำไปใช้ใหม่แทนที่จะทำซ้ำสำหรับแต่ละอินสแตนซ์ใหม่ การใช้งาน knn โดยใช้เทคนิคเหล่านี้จะทำงานในระหว่างขั้นตอนการฝึกอบรม ตัวอย่างเช่น scikit-learn สามารถสร้าง kd-trees หรือ ball tree ระหว่างการเรียกไปยังfit()
ฟังก์ชัน
การเลือกและการวัดระยะทาง
จำนวนของเพื่อนบ้านและตัวชี้วัดระยะทางคือ hyperparameters ของตัวแยกประเภท KNN โดยทั่วไปสามารถปรับปรุงประสิทธิภาพได้โดยเลือกให้เหมาะสมกับปัญหา แต่การตั้งค่าที่ดีที่สุดมักจะไม่รู้จักล่วงหน้าและเราต้องค้นหาในระหว่างขั้นตอนการฝึกอบรม การค้นหาจำนวนนี้เพื่อแก้ไขปัญหาการปรับให้เหมาะสมและคล้ายกับการปรับพารามิเตอร์ไฮเปอร์พารามิเตอร์สำหรับวิธีอื่น
คุณสามารถนำไปใช้ในทางที่ขี้เกียจและทำให้การออกกำลังกายที่ดีเมื่อค้นพบภาษา (ดูตัวอย่างหนึ่งในโพสต์บล็อกของฉัน ) แต่คุณสามารถจัดทำดัชนีข้อมูลเพื่อทำการคาดคะเน (เร็วกว่ามาก)
หากพื้นที่คุณลักษณะมีมิติหนึ่งการจัดเรียงคะแนนตามคุณลักษณะนี้จะช่วยให้คุณค้นหาเพื่อนบ้านได้เร็วขึ้นมาก (โดยใช้การค้นหาแบบแบ่งขั้วตัวอย่าง) ในมิติขนาดใหญ่ไม่มีทั่วไปตามธรรมชาติของการเรียงลำดับ แต่คุณสามารถจัดทำดัชนีจุดโดยใช้ (ตามตัวอย่าง) quadtrees
มองไปที่แหล่งที่มาคุณจะเห็นว่าวิธีการต่างๆได้รับการดำเนินการใน scikit เรียนรู้ และมีการวิจัยบางอย่างที่ปรับปรุงการค้นหาเพื่อนบ้านที่ใกล้ที่สุดเหล่านี้
ในขณะที่ประเด็นที่ผู้ตอบคนอื่นทำนั้นถูกต้องและน่าสนใจฉันอยากจะชี้ให้เห็นอีกสิ่งหนึ่งจากมุมมองด้านวิศวกรรมซอฟต์แวร์ที่เคร่งครัด:
เพื่อให้สอดคล้องกับ API ของพวกเขา
เครื่องมือประมาณการของ sklearn ควรมีfit
วิธีการหนึ่งที่ชอบอาร์เรย์หนึ่งหรือสองครั้ง (ขึ้นอยู่กับว่าเป็นตัวประมาณแบบมีผู้ดูแล / ไม่มีการดูแล) และรายละเอียดเฉพาะการนำไปใช้ ( ที่มา )
ดังนั้นแม้ว่าfit
วิธีของ knn จะไม่ทำอะไรเลยอย่างแน่นอน แต่ก็น่าจะยังคงมีอยู่เพราะ knn เป็นผู้ประเมินและนักพัฒนาของ sklearn เช่นเดียวกับรหัสที่พวกเขามีส่วนร่วมคาดว่าตัวประมาณจะมีfit
วิธีการ