แบบจำลองการจำแนกโดยใช้โครงข่ายประสาทเทียม (ANN)
เผยแพร่แล้ว: 2020-12-01ในคำศัพท์การเรียนรู้ของเครื่อง การจัดประเภทหมายถึงปัญหาการสร้างแบบจำลองเชิงคาดการณ์ ซึ่งข้อมูลที่ป้อนเข้าถูกจัดเป็นหนึ่งในคลาสที่มีป้ายกำกับที่กำหนดไว้ล่วงหน้า ตัวอย่างเช่น การคาดคะเนว่าใช่หรือไม่ใช่ จริงหรือเท็จ จะอยู่ในหมวดหมู่ของการจัดประเภทแบบไบนารี เนื่องจากจำนวนเอาต์พุตถูกจำกัดที่ป้ายกำกับสองป้าย
ในทำนองเดียวกัน เอาต์พุตที่มีหลายคลาส เช่น การจำแนกกลุ่มอายุที่แตกต่างกัน จะเรียกว่าปัญหาการจำแนกแบบหลายคลาส ปัญหาการจำแนกประเภทเป็นปัญหา ML ประเภทหนึ่งที่ใช้บ่อยที่สุดหรือกำหนดไว้ ซึ่งสามารถนำไปใช้ในกรณีการใช้งานต่างๆ มีโมเดลแมชชีนเลิร์นนิงหลายแบบที่สามารถใช้สำหรับปัญหาการจำแนกประเภทได้
ตั้งแต่ Bagging ไปจนถึงเทคนิค Boosting แม้ว่า ML จะสามารถจัดการกับกรณีการใช้งานการจำแนกประเภทได้ แต่ Neural Networks ก็เข้ามามีบทบาทเมื่อเรามีคลาสเอาต์พุตจำนวนมากและข้อมูลจำนวนมากเพื่อรองรับประสิทธิภาพของโมเดล ต่อจากนี้ไป เราจะมาดูกันว่าเราจะนำโมเดลการจัดประเภทไปใช้อย่างไรโดยใช้ Neural Networks บน Keras (Python)
เรียนรู้ หลักสูตรปัญญาประดิษฐ์ จากมหาวิทยาลัยชั้นนำของโลก รับ Masters, Executive PGP หรือ Advanced Certificate Programs เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
สารบัญ
โครงข่ายประสาทเทียม
โครงข่ายประสาทเป็นตัวแทนของการเรียนรู้สมองของมนุษย์อย่างหลวม ๆ โครงข่ายประสาทเทียมประกอบด้วยเซลล์ประสาทซึ่งมีหน้าที่สร้างเลเยอร์ เซลล์ประสาทเหล่านี้เรียกอีกอย่างว่าพารามิเตอร์ที่ได้รับการปรับแต่ง
ผลลัพธ์จากแต่ละชั้นจะถูกส่งต่อไปยังชั้นถัดไป มีฟังก์ชันการเปิดใช้งานแบบไม่เชิงเส้นที่แตกต่างกันในแต่ละเลเยอร์ ซึ่งช่วยในกระบวนการเรียนรู้และผลลัพธ์ของแต่ละเลเยอร์ เลเยอร์เอาต์พุตเรียกอีกอย่างว่าเซลล์ประสาทเทอร์มินัล

ที่มา: Wikipedia
น้ำหนักที่เกี่ยวข้องกับเซลล์ประสาทและมีหน้าที่ในการทำนายโดยรวมจะได้รับการอัปเดตในแต่ละยุค อัตราการเรียนรู้ได้รับการปรับให้เหมาะสมโดยใช้เครื่องมือเพิ่มประสิทธิภาพต่างๆ Neural Network แต่ละเครือข่ายมีฟังก์ชันต้นทุนซึ่งจะลดลงเมื่อการเรียนรู้ดำเนินต่อไป จากนั้นจึงใช้ตุ้มน้ำหนักที่ดีที่สุดซึ่งฟังก์ชันต้นทุนให้ผลลัพธ์ที่ดีที่สุด
อ่าน: บทแนะนำการตรวจจับวัตถุ TensorFlow สำหรับผู้เริ่มต้น
ปัญหาการจำแนกประเภท
สำหรับบทความนี้ เราจะใช้ Keras เพื่อสร้าง Neural Network Keras สามารถนำเข้าโดยตรงใน python โดยใช้คำสั่งต่อไปนี้
นำเข้าเทนเซอร์โฟลว์เป็น tf
จาก tensorflow นำเข้า keras
จาก keras.models นำเข้า Sequential
จาก keras.layers นำเข้าหนาแน่น
ชุดข้อมูลและตัวแปรเป้าหมาย
เราจะใช้ชุดข้อมูลโรคเบาหวานซึ่งจะมีคุณสมบัติดังต่อไปนี้:
ตัวแปรอินพุต (X):
- การตั้งครรภ์: จำนวนครั้งที่ตั้งครรภ์
- กลูโคส: ความเข้มข้นของกลูโคสในพลาสมา 2 ชั่วโมงในการทดสอบความทนทานต่อกลูโคสในช่องปาก
- ความดันโลหิต: ความดันโลหิตจาง (มม. ปรอท)
- SkinThickness: ความหนาของผิวหนัง Triceps (มม.)
- อินซูลิน: อินซูลินในซีรัม 2 ชั่วโมง (mu U/ml)
- BMI: ดัชนีมวลกาย (น้ำหนักเป็นกก./(ส่วนสูงเป็นม.)^2)
- DiabetesPedigreeFunction: ฟังก์ชั่นสายเลือดเบาหวาน
- อายุ: อายุ (ปี)
ตัวแปรเอาต์พุต (y):
ผลลัพธ์: ตัวแปรระดับ (0 หรือ 1) [ผู้ป่วยเป็นโรคเบาหวานหรือไม่]
#โหลดชุดข้อมูล
df= loadtxt('pima-indians-diabetes.csv', delimiter=',')
# แยกข้อมูลออกเป็น X (อินพุต) และ Y (เอาต์พุต)
X = ชุดข้อมูล[:,0:8]
y = ชุดข้อมูล[:,8]
กำหนด Keras Model
เราสามารถเริ่มสร้างโครงข่ายประสาทเทียมโดยใช้แบบจำลองตามลำดับ วิธีการจากบนลงล่างนี้ช่วยสร้างสถาปัตยกรรม Neural net และเล่นกับรูปร่างและเลเยอร์ เลเยอร์แรกจะมีจำนวนคุณสมบัติที่สามารถแก้ไขได้โดยใช้ input_dim เราจะตั้งค่าเป็น 8 ในเงื่อนไขนี้
การสร้าง Neural Networks ไม่ใช่กระบวนการที่ง่ายมาก มีการลองผิดลองถูกเกิดขึ้นมากมายก่อนที่จะมีการสร้างแบบจำลองที่ดี เราจะสร้างโครงสร้างเครือข่ายที่เชื่อมต่ออย่างสมบูรณ์โดยใช้คลาส Dense ใน keras เซลล์ประสาทนับเป็นอาร์กิวเมนต์แรกที่จัดให้กับเลเยอร์ที่หนาแน่น
ฟังก์ชันการเปิดใช้งานสามารถตั้งค่าได้โดยใช้อาร์กิวเมนต์การเปิดใช้งาน เราจะใช้ Rectified Linear Unit เป็นฟังก์ชันการเปิดใช้งานในกรณีนี้ มีตัวเลือกอื่นๆ เช่น Sigmoid หรือ TanH แต่ RELU เป็นตัวเลือกทั่วไปและดีกว่า

#กำหนดรูปแบบเครา
รุ่น = ลำดับ ()
model.add(หนาแน่น(12, input_dim=8, การเปิดใช้งาน='relu'))
model.add(หนาแน่น(8, การเปิดใช้งาน='relu'))
model.add(หนาแน่น (1, การเปิดใช้งาน='sigmoid'))
รวบรวม Keras Model
การคอมไพล์โมเดลเป็นขั้นตอนต่อไปหลังจากนิยามโมเดล Tensorflow ใช้สำหรับการรวบรวมโมเดล การรวบรวมเป็นกระบวนการที่มีการตั้งค่าพารามิเตอร์สำหรับการฝึกแบบจำลองและการทำนาย สามารถใช้ CPU/GPU หรือหน่วยความจำแบบกระจายในพื้นหลังได้
เราต้องระบุฟังก์ชันการสูญเสียซึ่งใช้ในการประเมินน้ำหนักสำหรับชั้นต่างๆ เครื่องมือเพิ่มประสิทธิภาพจะปรับอัตราการเรียนรู้และผ่านชุดน้ำหนักต่างๆ ในกรณีนี้ เราจะใช้ Binary Cross Entropy เป็นฟังก์ชันการสูญเสีย ในกรณีของตัวเพิ่มประสิทธิภาพ เราจะใช้ ADAM ซึ่งเป็นอัลกอริธึมการไล่ระดับสีสุ่มสุ่มที่มีประสิทธิภาพ
นิยมใช้ในการจูน สุดท้ายนี้ เนื่องจากเป็นปัญหาการจัดหมวดหมู่ เราจะรวบรวมและรายงานความถูกต้องของการจัดประเภท ซึ่งกำหนดผ่านอาร์กิวเมนต์เมตริก เราจะใช้ความแม่นยำในกรณีนี้
# รวบรวมโมเดล keras
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
ความพอดีของแบบจำลองและการประเมิน
การติดตั้งโมเดลนั้นรู้จักกันในชื่อการฝึกโมเดล หลังจากคอมไพล์โมเดลแล้ว โมเดลก็พร้อมที่จะข้ามข้อมูลและฝึกฝนตัวเองอย่างมีประสิทธิภาพ ฟังก์ชัน fit() จาก Keras สามารถใช้สำหรับกระบวนการฝึกโมเดล พารามิเตอร์หลัก 2 ตัวที่ใช้ก่อนการฝึกโมเดล ได้แก่:
- ยุค: หนึ่งผ่านชุดข้อมูลทั้งหมด
- ขนาดแบทช์: น้ำหนักจะได้รับการอัปเดตในแต่ละขนาดแบทช์ ยุคประกอบด้วยชุดข้อมูลที่มีการกระจายเท่าๆ กัน
# พอดีกับโมเดล keras บนชุดข้อมูล
model.fit(X, y, epochs=150, batch_size=10)
ใช้ GPU หรือ CPU ในกระบวนการนี้ การฝึกอบรมอาจเป็นกระบวนการที่ใช้เวลานานมาก ขึ้นอยู่กับยุคสมัย ขนาดแบทช์ และที่สำคัญที่สุดคือขนาดของข้อมูล
นอกจากนี้เรายังสามารถประเมินแบบจำลองในชุดข้อมูลการฝึกอบรมโดยใช้ฟังก์ชันการประเมิน () ข้อมูลสามารถแบ่งออกเป็นชุดการฝึกอบรมและการทดสอบ และการทดสอบ X และ Y สามารถใช้สำหรับการประเมินแบบจำลองได้
สำหรับแต่ละคู่อินพุตและเอาต์พุต สิ่งนี้จะสร้างการคาดการณ์และรวบรวมคะแนน รวมถึงการสูญเสียโดยเฉลี่ยและการวัดที่เราได้ติดตั้งไว้ เช่น ความแม่นยำ
รายการของค่าสองค่าจะถูกส่งกลับโดยฟังก์ชันการประเมิน () อันดับแรกจะเป็นการสูญเสียแบบจำลองในชุดข้อมูล และครั้งที่สองจะเป็นความถูกต้องของแบบจำลองในชุดข้อมูล เราสนใจเพียงความถูกต้องของรายงานเท่านั้น ดังนั้นเราจะไม่สนใจความสำคัญของการสูญเสีย
#ประเมินโมเดลเครา

_ ความถูกต้อง = model.evaluate(Xtest, ytest)
พิมพ์('ความถูกต้อง: %.2f' % (ความแม่นยำ*100))
อ่านเพิ่มเติม: บทนำโมเดลโครงข่ายประสาทเทียม
บทสรุป
เราสร้างและประเมินโครงข่ายประสาทเทียมตามการจำแนกประเภท แม้ว่าข้อมูลที่ใช้จะมีขนาดเล็กในกรณีนี้ แต่โครงข่ายประสาทเทียมส่วนใหญ่เหมาะสำหรับชุดข้อมูลตัวเลขขนาดใหญ่
ชำระเงิน โปรแกรมใบรับรองขั้นสูงของ upGrad ในการเรียนรู้ของเครื่อง & NLP หลักสูตรนี้จัดทำขึ้นโดยคำนึงถึงนักเรียนหลายประเภทที่สนใจแมชชีนเลิร์นนิง โดยเสนอการให้คำปรึกษาแบบ 1-1 และอีกมากมาย
โครงข่ายประสาทเทียมสามารถนำมาใช้ในการจำแนกประเภทได้อย่างไร?
การจัดประเภทเป็นเรื่องเกี่ยวกับการจัดหมวดหมู่วัตถุออกเป็นกลุ่ม ประเภทของการจัดประเภทเป็นที่ที่คาดการณ์ได้หลายคลาส ในโครงข่ายประสาทเทียม หน่วยประสาทถูกจัดเป็นชั้นๆ ในเลเยอร์แรก อินพุตจะถูกประมวลผลและเอาต์พุตจะถูกผลิตขึ้น ผลลัพธ์นี้จะถูกส่งผ่านเลเยอร์ที่เหลือเพื่อสร้างผลลัพธ์สุดท้าย อินพุตเดียวกันถูกประมวลผลผ่านเลเยอร์เพื่อสร้างเอาต์พุตที่ต่างกัน สิ่งนี้สามารถแสดงด้วยเพอร์เซปตรอนหลายชั้น ประเภทของโครงข่ายประสาทเทียมที่ใช้ในการจำแนกประเภทขึ้นอยู่กับชุดข้อมูล แต่โครงข่ายประสาทเทียมถูกนำมาใช้สำหรับปัญหาการจำแนกประเภท
เหตุใดโครงข่ายประสาทเทียมจึงดีสำหรับการจำแนกประเภท
ในการตอบคำถามนี้ เราจำเป็นต้องเข้าใจหลักการพื้นฐานของโครงข่ายประสาทเทียมและปัญหาที่โครงข่ายประสาทเทียมออกแบบมาเพื่อแก้ไข ตามชื่อที่แนะนำ โครงข่ายประสาทเทียมคือแบบจำลองทางชีววิทยาที่ได้รับแรงบันดาลใจจากสมองมนุษย์ แนวคิดพื้นฐานคือเราต้องการสร้างแบบจำลองเซลล์ประสาทเป็นฟังก์ชันทางคณิตศาสตร์ เซลล์ประสาททุกเซลล์รับอินพุตจากเซลล์ประสาทอื่นและคำนวณผลลัพธ์ จากนั้นเราเชื่อมต่อเซลล์ประสาทเหล่านี้ในลักษณะที่เลียนแบบโครงข่ายประสาทในสมอง วัตถุประสงค์คือเพื่อเรียนรู้เครือข่ายที่สามารถรับข้อมูลบางส่วนและสร้างผลลัพธ์ที่เหมาะสม
เราควรใช้โครงข่ายประสาทเทียมเมื่อใด
โครงข่ายประสาทเทียมใช้ในสถานการณ์ที่คุณพยายามจำลองการทำงานของสิ่งมีชีวิตหรือตรวจจับรูปแบบในข้อมูล การวินิจฉัยทางการแพทย์ การรู้จำคำพูด การแสดงข้อมูล และการคาดเดาตัวเลขที่เขียนด้วยลายมือล้วนเป็นกรณีการใช้งานที่ดีสำหรับ ANN โครงข่ายประสาทเทียมจะใช้เมื่อจำเป็นต้องเข้าใจความสัมพันธ์ที่ซับซ้อนระหว่างอินพุตและเอาต์พุต ตัวอย่างเช่น ตัวแปรอาจมีสัญญาณรบกวนมากและอาจเป็นเรื่องยากที่จะเข้าใจความสัมพันธ์ระหว่างตัวแปรเหล่านี้ ดังนั้นการใช้โครงข่ายประสาทเทียมจึงเป็นแนวทางปฏิบัติทั่วไปในการรักษาความรู้และข้อมูล