การใช้ K-nearest neighborhood (K-NN) ในการจำแนก ด้วย MATLAB

การจำแนกประเภทเป็นปัญหาสำคัญในข้อมูลขนาดใหญ่วิทยาศาสตร์ข้อมูลและการเรียนรู้ของเครื่อง เพื่อนบ้านที่ใกล้ที่สุด K-K (KNN) เป็นหนึ่งในอัลกอริทึมที่เก่าแก่ที่สุด, ง่ายที่สุดและแม่นยำสำหรับการจำแนกรูปแบบและแบบจำลองการถดถอย KNN ถูกเสนอในปี 1951 โดย Fix, E. and Hodges, J.L. และแก้ไขโดย Cover, T., & Hart, P.

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

การใช้งาน KNN เป็นอัลกอริธึมที่ไม่ใช้พารามิเตอร์ คำว่าไม่ใช้พารามิเตอร์หมายถึงไม่มีพารามิเตอร์หรือจำนวนพารามิเตอร์คงที่โดยไม่คำนึงถึงขนาดของข้อมูล แต่พารามิเตอร์จะถูกกำหนดโดยขนาดของชุดข้อมูลการฝึกสอน

K-nearest neighborhood (K-NN) เป็นการเรียนรู้ที่ดีมากต่อเทคนิคการจำแนกแบบ nonparametric และ parametric และมีประสิทธิภาพมากเมื่อใช้กับข้อมูลการสอนที่ใช้ฐานข้อมูลที่มาก การจำแนกโดยการใช้ K-nearest neighborhood (K-NN) เป็นตัวเลือกที่ดี ในวิธี nearest neighborhood เป็นความจำเป็นต่อการกำหนดค่าพารามิเตอร์ อันซึ่ง เป็นจำนวนของคุณลักษณะเด่นที่ใกล้เคียง

K-nearest neighborhood ในการจำแนก ด้วย MATLAB

ขั้นตอนของ K-NN Imputation มี 3 ขั้นตอนดังนี้

ขั้นที่ 1: เลือก K ยีน ที่ใกล้ที่สุดกับยีนที่มี Missing Values (MV) เพื่อที่จะ Estimate Missing Values xij ของยีนที่ i-th ในตัวอย่างที่ ยีนซึ่งเป็น Expression Vector จะถูกเลือกโดย มีลักษณะการแสดงออกทางพันธุศาสตร์ i มากกว่า ตัวอย่าง j

ขั้นที่ 2: คำนวณหาระยะห่างระหว่างข้อมูล 2 Expression Vector xi และ xj ด้วยวิธีการ Euclidian distance ครอบคลุมส่วนประกอบต่างๆ ในตัวอย่าง j-th Euclidian distance ระหว่าง xi และ xj สามารถคำนวณได้จาก

โดยที่

d(xi,xj) คือ ระยะห่างระหว่างตัวอย่าง กับตัวอย่าง

n คือ จำนวนคุณสมบัติทั้งหมดของตัวอย่าง

xik คือ คุณสมบัติตัวที่ k ของตัวอย่าง

xjk คือ คุณสมบัติตัวที่ k ของตัวอย่าง

ขั้นที่ 3: เลือกค่าข้อมูลที่มีค่า dist น้อยที่สุด ตัวเพื่อนำมาพิจารณาหาคำตอบ

สำหรับขั้นตอนในการเขียนโค๊ดใน Matlab เราก็จะเขียนตามสูตรข้างบนเลย

1. กำหนดข้อมูลการทดสอบ

dataMatrix = test; % ข้อมูลการทดสอบ

2. กำหนดข้อมูลการสอน

queryMatrix = datatraining; % ข้อมูลการสอน

3. % กำหนด k = 1

kn = 1; % กำหนด k = 1

4. กำหนดตัวแปรต่างๆให้เป็นเอาท์พุต

neighborIds = zeros(size(queryMatrix,1),kn); % กำหนดตัวแปร neighborIds ให้เป็นเอาท์พุต

neighborDistances = neighborIds; % กำหนดตัวแปร neighborDistances ให้เท่ากับ %neighborIds และให้เป็นเอาท์พุต

numDataVectors = size(dataMatrix,1); % กำหนดตัวแปร numDataVectors ให้เป็นเอาท์พุต

numQueryVectors = size(queryMatrix,1); % กำหนดตัวแปร numQueryVectors ให้เป็นเอาท์พุต

5. ทำการหาระยะทางจากสูตรข้างบน

for i=1:numQueryVectors, % วนลูปจนครบข้อมูลการสอน

dist = sum((repmat(queryMatrix(i,:),numDataVectors,1)-dataMatrix).²,2); % ทำการหาระยะทางระหว่างข้อมูลทดสอบกับข้อมูลการสอน โดยใช้สูตรที่ 1 แต่ยังไม่หา sqrt

[sortval sortpos] = sort(dist,’ascend’); % ทำการเรียงข้อมูลจากน้อยไปมาก

neighborIds(i,:) = sortpos(1:kn); % ทำการเรียงตำแหน่งของ pixel จากน้อยไปมาก

neighborDistances(i,:) = sqrt(sortval(1:kn)); % ทำการหา Sqrt

end

6. หาค่าที่ต่ำที่สุด

mini = min(neighborDistances);

7. % หาตำแหน่งที่ให้ค่าที่ต่ำที่สุด

out(iCentroid) = find(neighborDistances == mini);

หมายเหตุท้าย:
หากคุณชอบบทความนี้อย่าลืมคลิก❤ด้านล่างเพื่อแนะนำและถ้าคุณมีคำถามใด ๆ แสดงความคิดเห็นและฉันจะพยายามอย่างดีที่สุดที่จะตอบ คุณสามารถติดตามฉันบน facebook page (https://www.facebook.com/nextsoftwarehousethailand/) และสามารถส่งอีเมลถึงฉัน

ขอให้ทุกคนมีวันที่ดี 🙂