โดย: Kan Ouivirach
| Machine Learning
ปัญหา Regression ต่างกับ Classification อย่างไร?
ทั้งปัญหา Regression และปัญหา Classification ทั้งคู่อยู่จัดอยู่ในการเรียนรู้แบบ Supervised Learning เราลองมาดูปัญหาทีละปัญหากันว่ามันคืออะไรกันบ้างนะปัญหา Regressionลองนึกถึงแอพพลิเคชั่นที่เราใช้กันในปัจจุบันเช่น เราอาจจะมีระบบทำนายการเติบโต ทำนายยอดขาย ทำนายราคาสินค้าหรือบ้าน รวมไปถึงการทำนายระดับความดันเลือด ระบบพวกนี้จะมีสิ่งที่เหมือนกันก็คือเราจะมีข้อมูลและเราจะนำข้อมูลนั้นๆ ไปทำนายค่าๆ หนึ่งในอนาคต ทีนี้ประเด็นสำคัญคือ ค่าๆ หนึ่งในอนาคตเนี่ย จะเป็นค่าแบบ Continuous ครับให้โค้ดเป็นคนอธิบายครับ สมมุติว่าผมมีข้อมูลของเวลาที่ใช้ในการอ่านหนังสือและคะแนนสอบที่ได้ของนักเรียน ผมก็จะสามารถที่จะพอทำนายได้ว่า เช่นถ้ามีนักเรียนคนหนึ่งใช้เวลาอ่านหนังสือ 3.2 ชม. นักเรียนคนนั้นควรจะได้คะแนนประมาณเท่าไหร่ สังเกตตรงว่าค่าคะแนน ซึ่งค่านี้เป็นแบบ Continuousimport pandas as pddf = pd.DataFrame(data={ 'hours': [2.5, 5.1, 3.2, 8.5, 3.5, 9.2, 8.9, 6.9, 7.8, 2.7], 'scores': [21, 47, 27, 75, 30, 88, 95, 76, 86, 25]})dfข้อมูลจำนวนชั่วโมงที่ใช้ในการอ่านหนังสือกับคะแนนสอบที่ได้ผมจะลองมาสร้างโมเดล Regression ครับ ในที่นี้ขอใช้ Linear Regression นะครับ เป็น Regression ที่ง่ายที่สุดX = df[['hours']]y = df.scoresfrom sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, y_train)ลองเทสดูregressor.predict(X_test)ได้ผลประมาณนี้ผลที่ได้จากโมเดล Regression (Linear Regression)จะเห็นได้ว่าถ้านักเรียนคนหนึ่งใช้เวลาอ่านหนังสือ 3.2 ชั่วโมง เค้าน่าจะได้คะแนนประมาณ 28.97 ส่วนถ้านักเรียนอีกคนหนึ่งใช้เวลาอ่านหนังสือประมาณ 7.8 ชั่วโมง เค้าน่าจะได้คะแนนประมาณ 76.72นี่แหละครับปัญหา Regression เป็นปัญหาที่เราอยากจะทำนายค่าในอนาคต หรือค่าที่เราอยากจะประมาณการเป็น Continuousปัญหา Classificationมาดูปัญหา Classification กันบ้าง มีข้อแตกต่างจาก Regression ก็คือ.. ค่าที่เราจะทำนายจะเป็นค่าแบบ Discrete ครับ! ต่างกันแค่นี้จริงเหรอ? 🤔จริงครับ! แค่นี้แหละ เรามาใช้โค้ดเป็นคนอธิบายเช่นเดิม ผมต้องการสร้างโมเดลขึ้นมาเพื่อทำนายว่าคนๆ นี้เป็นเป็นโรคมะเร็งเต้านมหรือเปล่า (Healthy controls หรือ Patients) สังเกตตรงว่าค่าที่จะทำนายนี้ จะเป็นแบบ Discreteสำหรับข้อมูลชุดนี้เค้ากำหนดให้เลข 1 คือ Healthy controls ส่วนเลข 2 คือ Patientsimport pandas as pddf = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/00451/dataR2.csv')df.head()อ่านข้อมูล Breast Cancer จาก UCI Machine Learning Repositoryต่อไปเราจะสร้างโมเดล Classification ขึ้นมาครับ ขอใช้ k-Nearest Neighbors (k-NNs) เนอะX = df.drop('Classification', axis='columns')y = df.Classificationfrom sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)from sklearn import neighborsknn = neighbors.KNeighborsClassifier(n_neighbors=5)knn.fit(X_train, y_train)แล้วเราลองเทสดูknn.predict(X_test)ได้ผลลัพธ์ผลที่ได้จากโมเดล Classification (k-NNs)ผลลัพธ์ทางด้านบนจะออกมาเป็นแบบ Discrete ครับ คือถ้าไม่ตอบว่า Healthy controls ก็จะตอบว่า Patients นั่นเองClassification เป็นปัญหาที่เราอยากจะทำนายค่าในอนาคต หรือที่เราอยากจะจำแนกเป็น Discreteสรุปสั้นๆRegression กับ Classification จะต่างกันที่ตรงค่าที่เราอยากจะทำนายหรือจำแนกครับ ถ้าค่านั้นเป็นแบบ Continuous เราควรจะจัดเป็นปัญหา Regression ส่วนถ้าเป็น Discrete ก็จะเป็นปัญหา Classification ดังนั้นเวลาที่เราเจอคำถามทาง Business หรือ Use Case ที่เราจะนำไปใช้ ก็อยากให้คิดก่อนว่าเราจะใช้ Regression หรือ Classification ครับ 😎