# เริ่มต้นกับ Python และ Scikit-learn สำหรับโมเดลการถดถอย ![สรุปเกี่ยวกับการถดถอยในรูปแบบสเก็ตโน้ต](../../../../sketchnotes/ml-regression.png) > สเก็ตโน้ตโดย [Tomomi Imura](https://www.twitter.com/girlie_mac) ## [แบบทดสอบก่อนเรียน](https://ff-quizzes.netlify.app/en/ml/) > ### [บทเรียนนี้มีในภาษา R ด้วย!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## บทนำ ในบทเรียนทั้งสี่นี้ คุณจะได้เรียนรู้วิธีสร้างโมเดลการถดถอย เราจะพูดถึงว่ามันมีไว้เพื่ออะไรในไม่ช้า แต่ก่อนที่คุณจะเริ่มต้น อย่าลืมเตรียมเครื่องมือที่เหมาะสมให้พร้อมสำหรับการเริ่มต้นกระบวนการนี้! ในบทเรียนนี้ คุณจะได้เรียนรู้วิธี: - ตั้งค่าคอมพิวเตอร์ของคุณสำหรับงานการเรียนรู้ของเครื่องในเครื่อง - ทำงานกับ Jupyter notebooks - ใช้ Scikit-learn รวมถึงการติดตั้ง - สำรวจการถดถอยเชิงเส้นผ่านการฝึกปฏิบัติ ## การติดตั้งและการตั้งค่า [![ML สำหรับผู้เริ่มต้น - ตั้งค่าเครื่องมือของคุณให้พร้อมสำหรับการสร้างโมเดล Machine Learning](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML สำหรับผู้เริ่มต้น - ตั้งค่าเครื่องมือของคุณให้พร้อมสำหรับการสร้างโมเดล Machine Learning") > 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการตั้งค่าคอมพิวเตอร์ของคุณสำหรับ ML 1. **ติดตั้ง Python** ตรวจสอบให้แน่ใจว่า [Python](https://www.python.org/downloads/) ได้รับการติดตั้งในคอมพิวเตอร์ของคุณแล้ว คุณจะใช้ Python สำหรับงานด้านวิทยาศาสตร์ข้อมูลและการเรียนรู้ของเครื่องหลายอย่าง ระบบคอมพิวเตอร์ส่วนใหญ่มีการติดตั้ง Python อยู่แล้ว นอกจากนี้ยังมี [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) ที่เป็นประโยชน์เพื่อช่วยให้การตั้งค่าสำหรับผู้ใช้บางคนง่ายขึ้น อย่างไรก็ตาม การใช้งาน Python บางอย่างอาจต้องการเวอร์ชันที่แตกต่างกัน ดังนั้นจึงเป็นประโยชน์ที่จะทำงานใน [virtual environment](https://docs.python.org/3/library/venv.html) 2. **ติดตั้ง Visual Studio Code** ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Visual Studio Code ในคอมพิวเตอร์ของคุณแล้ว ทำตามคำแนะนำเหล่านี้เพื่อ [ติดตั้ง Visual Studio Code](https://code.visualstudio.com/) สำหรับการติดตั้งพื้นฐาน คุณจะใช้ Python ใน Visual Studio Code ในคอร์สนี้ ดังนั้นคุณอาจต้องการทบทวนวิธี [ตั้งค่า Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) สำหรับการพัฒนา Python > ทำความคุ้นเคยกับ Python โดยทำตามคอลเลกชันของ [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) > > [![ตั้งค่า Python กับ Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "ตั้งค่า Python กับ Visual Studio Code") > > 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอ: การใช้ Python ใน VS Code 3. **ติดตั้ง Scikit-learn** โดยทำตาม [คำแนะนำเหล่านี้](https://scikit-learn.org/stable/install.html) เนื่องจากคุณต้องใช้ Python 3 จึงแนะนำให้ใช้ virtual environment โปรดทราบว่าหากคุณกำลังติดตั้งไลบรารีนี้บน Mac ที่ใช้ M1 มีคำแนะนำพิเศษในหน้าที่ลิงก์ไว้ข้างต้น 4. **ติดตั้ง Jupyter Notebook** คุณจะต้อง [ติดตั้งแพ็กเกจ Jupyter](https://pypi.org/project/jupyter/) ## สภาพแวดล้อมการเขียน ML ของคุณ คุณจะใช้ **notebooks** เพื่อพัฒนาโค้ด Python และสร้างโมเดลการเรียนรู้ของเครื่อง ไฟล์ประเภทนี้เป็นเครื่องมือทั่วไปสำหรับนักวิทยาศาสตร์ข้อมูล และสามารถระบุได้ด้วยนามสกุล `.ipynb` Notebooks เป็นสภาพแวดล้อมแบบโต้ตอบที่ช่วยให้นักพัฒนาสามารถเขียนโค้ด เพิ่มบันทึก และเขียนเอกสารประกอบรอบ ๆ โค้ด ซึ่งมีประโยชน์มากสำหรับโครงการที่เน้นการทดลองหรือการวิจัย [![ML สำหรับผู้เริ่มต้น - ตั้งค่า Jupyter Notebooks เพื่อเริ่มสร้างโมเดลการถดถอย](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML สำหรับผู้เริ่มต้น - ตั้งค่า Jupyter Notebooks เพื่อเริ่มสร้างโมเดลการถดถอย") > 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการฝึกปฏิบัตินี้ ### การฝึกปฏิบัติ - ทำงานกับ notebook ในโฟลเดอร์นี้ คุณจะพบไฟล์ _notebook.ipynb_ 1. เปิด _notebook.ipynb_ ใน Visual Studio Code Jupyter server จะเริ่มต้นพร้อมกับ Python 3+ คุณจะพบพื้นที่ใน notebook ที่สามารถ `run` ได้ ซึ่งเป็นส่วนของโค้ด คุณสามารถรันโค้ดบล็อกได้โดยเลือกไอคอนที่มีลักษณะเหมือนปุ่มเล่น 2. เลือกไอคอน `md` และเพิ่มข้อความ markdown ต่อไปนี้ **# ยินดีต้อนรับสู่ notebook ของคุณ** จากนั้นเพิ่มโค้ด Python 3. พิมพ์ **print('hello notebook')** ในโค้ดบล็อก 4. เลือกลูกศรเพื่อรันโค้ด คุณควรเห็นข้อความที่พิมพ์ออกมา: ```output hello notebook ``` ![VS Code พร้อม notebook ที่เปิดอยู่](../../../../2-Regression/1-Tools/images/notebook.jpg) คุณสามารถสลับโค้ดกับคอมเมนต์เพื่อเขียนเอกสารประกอบใน notebook ได้ด้วยตัวเอง ✅ ลองคิดดูสักนิดว่าสภาพแวดล้อมการทำงานของนักพัฒนาเว็บแตกต่างจากของนักวิทยาศาสตร์ข้อมูลอย่างไร ## เริ่มต้นใช้งาน Scikit-learn ตอนนี้ Python ได้รับการตั้งค่าในสภาพแวดล้อมของคุณแล้ว และคุณคุ้นเคยกับ Jupyter notebooks แล้ว มาทำความคุ้นเคยกับ Scikit-learn กันเถอะ (ออกเสียงว่า `sci` เหมือน `science`) Scikit-learn มี [API ที่ครอบคลุม](https://scikit-learn.org/stable/modules/classes.html#api-ref) เพื่อช่วยคุณทำงาน ML ตามที่ระบุใน [เว็บไซต์ของพวกเขา](https://scikit-learn.org/stable/getting_started.html) "Scikit-learn เป็นไลบรารีการเรียนรู้ของเครื่องแบบโอเพ่นซอร์สที่รองรับการเรียนรู้แบบมีผู้สอนและไม่มีผู้สอน นอกจากนี้ยังมีเครื่องมือต่าง ๆ สำหรับการฟิตโมเดล การเตรียมข้อมูล การเลือกโมเดล และการประเมินผล รวมถึงเครื่องมืออื่น ๆ อีกมากมาย" ในคอร์สนี้ คุณจะใช้ Scikit-learn และเครื่องมืออื่น ๆ เพื่อสร้างโมเดลการเรียนรู้ของเครื่องสำหรับงานที่เรียกว่า 'การเรียนรู้ของเครื่องแบบดั้งเดิม' เราได้หลีกเลี่ยงการใช้โครงข่ายประสาทเทียมและการเรียนรู้เชิงลึกโดยเจตนา เนื่องจากหัวข้อเหล่านี้จะครอบคลุมในหลักสูตร 'AI for Beginners' ที่กำลังจะมาถึง Scikit-learn ทำให้การสร้างโมเดลและการประเมินผลใช้งานง่ายขึ้น โดยเน้นที่การใช้ข้อมูลเชิงตัวเลขเป็นหลัก และมีชุดข้อมูลที่พร้อมใช้งานหลายชุดสำหรับการเรียนรู้ นอกจากนี้ยังมีโมเดลที่สร้างไว้ล่วงหน้าให้นักเรียนได้ลองใช้งาน มาสำรวจขั้นตอนการโหลดข้อมูลที่เตรียมไว้ล่วงหน้าและการใช้ตัวประมาณค่าในโมเดล ML แรกของคุณด้วย Scikit-learn กับข้อมูลพื้นฐานกันเถอะ ## การฝึกปฏิบัติ - notebook Scikit-learn แรกของคุณ > บทแนะนำนี้ได้รับแรงบันดาลใจจาก [ตัวอย่างการถดถอยเชิงเส้น](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) บนเว็บไซต์ของ Scikit-learn [![ML สำหรับผู้เริ่มต้น - โปรเจกต์การถดถอยเชิงเส้นแรกของคุณใน Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML สำหรับผู้เริ่มต้น - โปรเจกต์การถดถอยเชิงเส้นแรกของคุณใน Python") > 🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการฝึกปฏิบัตินี้ ในไฟล์ _notebook.ipynb_ ที่เกี่ยวข้องกับบทเรียนนี้ ให้ล้างเซลล์ทั้งหมดโดยกดไอคอน 'ถังขยะ' ในส่วนนี้ คุณจะทำงานกับชุดข้อมูลขนาดเล็กเกี่ยวกับโรคเบาหวานที่มีอยู่ใน Scikit-learn เพื่อการเรียนรู้ ลองจินตนาการว่าคุณต้องการทดสอบการรักษาสำหรับผู้ป่วยเบาหวาน โมเดลการเรียนรู้ของเครื่องอาจช่วยคุณกำหนดว่าผู้ป่วยรายใดจะตอบสนองต่อการรักษาได้ดีกว่า โดยพิจารณาจากการรวมกันของตัวแปรต่าง ๆ แม้แต่โมเดลการถดถอยพื้นฐาน เมื่อแสดงผลในรูปแบบภาพ อาจแสดงข้อมูลเกี่ยวกับตัวแปรที่ช่วยให้คุณจัดระเบียบการทดลองทางคลินิกเชิงทฤษฎีของคุณได้ ✅ มีวิธีการถดถอยหลายประเภท และการเลือกใช้วิธีใดขึ้นอยู่กับคำตอบที่คุณกำลังมองหา หากคุณต้องการทำนายความสูงที่เป็นไปได้ของบุคคลในช่วงอายุหนึ่ง คุณจะใช้การถดถอยเชิงเส้น เนื่องจากคุณกำลังมองหาค่าเชิงตัวเลข หากคุณสนใจที่จะค้นหาว่าประเภทของอาหารควรจัดเป็นมังสวิรัติหรือไม่ คุณกำลังมองหาการกำหนดหมวดหมู่ ดังนั้นคุณจะใช้การถดถอยโลจิสติก คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับการถดถอยโลจิสติกในภายหลัง ลองคิดดูสักนิดเกี่ยวกับคำถามที่คุณสามารถถามข้อมูล และวิธีการใดที่เหมาะสมกว่า มาเริ่มต้นงานนี้กันเถอะ ### นำเข้าไลบรารี สำหรับงานนี้ เราจะนำเข้าไลบรารีบางตัว: - **matplotlib** เป็น [เครื่องมือสร้างกราฟ](https://matplotlib.org/) ที่มีประโยชน์ และเราจะใช้มันเพื่อสร้างกราฟเส้น - **numpy** [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) เป็นไลบรารีที่มีประโยชน์สำหรับการจัดการข้อมูลเชิงตัวเลขใน Python - **sklearn** นี่คือไลบรารี [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) นำเข้าไลบรารีบางตัวเพื่อช่วยในงานของคุณ 1. เพิ่มการนำเข้าโดยพิมพ์โค้ดต่อไปนี้: ```python import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model, model_selection ``` ด้านบนคุณกำลังนำเข้า `matplotlib`, `numpy` และคุณกำลังนำเข้า `datasets`, `linear_model` และ `model_selection` จาก `sklearn` โดย `model_selection` ใช้สำหรับการแบ่งข้อมูลเป็นชุดฝึกอบรมและชุดทดสอบ ### ชุดข้อมูลเบาหวาน ชุดข้อมูล [เบาหวาน](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ที่มีอยู่ในตัวประกอบด้วยตัวอย่างข้อมูล 442 ชุดเกี่ยวกับเบาหวาน โดยมีตัวแปรคุณลักษณะ 10 ตัว ซึ่งบางตัวได้แก่: - age: อายุในปี - bmi: ดัชนีมวลกาย - bp: ความดันโลหิตเฉลี่ย - s1 tc: T-Cells (ชนิดของเซลล์เม็ดเลือดขาว) ✅ ชุดข้อมูลนี้รวมถึงแนวคิดของ 'เพศ' เป็นตัวแปรคุณลักษณะที่สำคัญต่อการวิจัยเกี่ยวกับเบาหวาน ชุดข้อมูลทางการแพทย์หลายชุดรวมการจัดประเภทแบบไบนารีประเภทนี้ ลองคิดดูว่าการจัดประเภทดังกล่าวอาจกีดกันบางส่วนของประชากรจากการรักษาได้อย่างไร ตอนนี้ โหลดข้อมูล X และ y > 🎓 จำไว้ว่า นี่คือการเรียนรู้แบบมีผู้สอน และเราต้องการเป้าหมาย 'y' ที่มีชื่อกำกับ ในเซลล์โค้ดใหม่ ให้โหลดชุดข้อมูลเบาหวานโดยเรียกใช้ `load_diabetes()` อินพุต `return_X_y=True` บ่งชี้ว่า `X` จะเป็นเมทริกซ์ข้อมูล และ `y` จะเป็นเป้าหมายการถดถอย 1. เพิ่มคำสั่ง print บางคำสั่งเพื่อแสดงรูปร่างของเมทริกซ์ข้อมูลและองค์ประกอบแรก: ```python X, y = datasets.load_diabetes(return_X_y=True) print(X.shape) print(X[0]) ``` สิ่งที่คุณได้รับกลับมาเป็นผลลัพธ์คือ tuple สิ่งที่คุณทำคือกำหนดค่าสองค่ แรกของ tuple ให้กับ `X` และ `y` ตามลำดับ เรียนรู้เพิ่มเติมเกี่ยวกับ [tuple](https://wikipedia.org/wiki/Tuple) คุณสามารถเห็นว่าข้อมูลนี้มี 442 รายการที่จัดอยู่ในอาร์เรย์ที่มี 10 องค์ประกอบ: ```text (442, 10) [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` ✅ ลองคิดดูสักนิดเกี่ยวกับความสัมพันธ์ระหว่างข้อมูลและเป้าหมายการถดถอย การถดถอยเชิงเส้นทำนายความสัมพันธ์ระหว่างคุณลักษณะ X และตัวแปรเป้าหมาย y คุณสามารถค้นหา [เป้าหมาย](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) สำหรับชุดข้อมูลเบาหวานในเอกสารประกอบได้หรือไม่? ชุดข้อมูลนี้แสดงอะไรให้เห็นเมื่อพิจารณาเป้าหมาย? 2. ต่อไป เลือกส่วนหนึ่งของชุดข้อมูลนี้เพื่อพล็อตโดยเลือกคอลัมน์ที่ 3 ของชุดข้อมูล คุณสามารถทำได้โดยใช้ตัวดำเนินการ `:` เพื่อเลือกทุกแถว จากนั้นเลือกคอลัมน์ที่ 3 โดยใช้ดัชนี (2) คุณยังสามารถปรับรูปร่างข้อมูลให้เป็นอาร์เรย์ 2D ตามที่ต้องการสำหรับการพล็อต โดยใช้ `reshape(n_rows, n_columns)` หากพารามิเตอร์ตัวใดตัวหนึ่งเป็น -1 มิติที่สอดคล้องกันจะถูกคำนวณโดยอัตโนมัติ ```python X = X[:, 2] X = X.reshape((-1,1)) ``` ✅ คุณสามารถพิมพ์ข้อมูลออกมาเพื่อตรวจสอบรูปร่างได้ตลอดเวลา 3. ตอนนี้คุณมีข้อมูลพร้อมสำหรับการพล็อตแล้ว คุณสามารถดูได้ว่าคอมพิวเตอร์สามารถช่วยกำหนดการแบ่งที่เหมาะสมระหว่างตัวเลขในชุดข้อมูลนี้ได้หรือไม่ ในการทำเช่นนี้ คุณต้องแบ่งข้อมูล (X) และเป้าหมาย (y) ออกเป็นชุดทดสอบและชุดฝึกอบรม Scikit-learn มีวิธีที่ตรงไปตรงมาสำหรับการทำเช่นนี้ คุณสามารถแบ่งข้อมูลทดสอบของคุณที่จุดที่กำหนด ```python X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) ``` 4. ตอนนี้คุณพร้อมที่จะฝึกโมเดลของคุณแล้ว! โหลดโมเดลการถดถอยเชิงเส้นและฝึกด้วยชุดฝึกอบรม X และ y ของคุณโดยใช้ `model.fit()`: ```python model = linear_model.LinearRegression() model.fit(X_train, y_train) ``` ✅ `model.fit()` เป็นฟังก์ชันที่คุณจะเห็นในไลบรารี ML หลายตัว เช่น TensorFlow 5. จากนั้น สร้างการพยากรณ์โดยใช้ข้อมูลทดสอบ โดยใช้ฟังก์ชัน `predict()` สิ่งนี้จะใช้เพื่อวาดเส้นระหว่างกลุ่มข้อมูล ```python y_pred = model.predict(X_test) ``` 6. ตอนนี้ถึงเวลาที่จะแสดงข้อมูลในกราฟแล้ว Matplotlib เป็นเครื่องมือที่มีประโยชน์มากสำหรับงานนี้ สร้าง scatterplot ของข้อมูลทดสอบ X และ y ทั้งหมด และใช้การพยากรณ์เพื่อวาดเส้นในตำแหน่งที่เหมาะสมที่สุด ระหว่างกลุ่มข้อมูลของโมเดล ```python plt.scatter(X_test, y_test, color='black') plt.plot(X_test, y_pred, color='blue', linewidth=3) plt.xlabel('Scaled BMIs') plt.ylabel('Disease Progression') plt.title('A Graph Plot Showing Diabetes Progression Against BMI') plt.show() ``` ![scatterplot ที่แสดงจุดข้อมูลเกี่ยวกับเบาหวาน](../../../../2-Regression/1-Tools/images/scatterplot.png) ✅ ลองคิดดูว่าเกิดอะไรขึ้นที่นี่ เส้นตรงกำลังวิ่งผ่านจุดข้อมูลเล็กๆ หลายจุด แต่จริงๆ แล้วมันกำลังทำอะไรอยู่? คุณสามารถมองเห็นได้ไหมว่าคุณควรจะใช้เส้นนี้เพื่อทำนายตำแหน่งของจุดข้อมูลใหม่ที่ยังไม่เคยเห็นมาก่อนในความสัมพันธ์กับแกน y ของกราฟได้อย่างไร? ลองอธิบายการใช้งานจริงของโมเดลนี้ออกมาเป็นคำพูด ยินดีด้วย! คุณสร้างโมเดลการถดถอยเชิงเส้นตัวแรกของคุณ สร้างการทำนายด้วยมัน และแสดงผลในกราฟ! --- ## 🚀ความท้าทาย ลองพล็อตตัวแปรอื่นจากชุดข้อมูลนี้ คำใบ้: แก้ไขบรรทัดนี้: `X = X[:,2]` จากเป้าหมายของชุดข้อมูลนี้ คุณสามารถค้นพบอะไรเกี่ยวกับการพัฒนาของโรคเบาหวานในฐานะโรค? ## [แบบทดสอบหลังการบรรยาย](https://ff-quizzes.netlify.app/en/ml/) ## ทบทวนและศึกษาด้วยตัวเอง ในบทเรียนนี้ คุณได้ทำงานกับการถดถอยเชิงเส้นแบบง่าย แทนที่จะเป็นการถดถอยเชิงเส้นแบบตัวแปรเดียวหรือแบบหลายตัวแปร ลองอ่านเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างวิธีการเหล่านี้ หรือดู [วิดีโอนี้](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) อ่านเพิ่มเติมเกี่ยวกับแนวคิดของการถดถอย และลองคิดดูว่าคำถามประเภทใดที่สามารถตอบได้ด้วยเทคนิคนี้ ลองทำ [บทเรียนนี้](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) เพื่อเพิ่มความเข้าใจของคุณ ## งานที่ได้รับมอบหมาย [ชุดข้อมูลอื่น](assignment.md) --- **ข้อจำกัดความรับผิดชอบ**: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้