แบบจำลองการจำแนกโดยใช้โครงข่ายประสาทเทียม (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 ตัวที่ใช้ก่อนการฝึกโมเดล ได้แก่:

  1. ยุค: หนึ่งผ่านชุดข้อมูลทั้งหมด
  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 โครงข่ายประสาทเทียมจะใช้เมื่อจำเป็นต้องเข้าใจความสัมพันธ์ที่ซับซ้อนระหว่างอินพุตและเอาต์พุต ตัวอย่างเช่น ตัวแปรอาจมีสัญญาณรบกวนมากและอาจเป็นเรื่องยากที่จะเข้าใจความสัมพันธ์ระหว่างตัวแปรเหล่านี้ ดังนั้นการใช้โครงข่ายประสาทเทียมจึงเป็นแนวทางปฏิบัติทั่วไปในการรักษาความรู้และข้อมูล