scikit-learn
| scikit-learn | |
|---|---|
| ผู้ออกแบบ | เดวิด คูร์นาโป |
| นักพัฒนา | โครงการชุมชน scikit-learn |
| วันที่เปิดตัว | มิถุนายน ค.ศ. 2007 |
| รุ่นเสถียร | 1.9.0
/ 2 มิถุนายน 2026 |
| ภาษาที่เขียน | ภาษาไพทอน, Cython, ภาษาซี, ภาษาซีพลัสพลัส |
| ระบบปฏิบัติการ | ลินุกซ์, แมคโอเอส, ไมโครซอฟท์ วินโดวส์ |
| ประเภท | ไลบรารีซอฟต์แวร์สำหรับการเรียนรู้ของเครื่อง |
| สัญญาอนุญาต | BSD 3-Clause |
| เว็บไซต์ | scikit-learn |
| ที่เก็บข้อมูล | |
scikit-learn หรือที่มักเรียกสั้นในโค้ดว่า sklearn เป็นไลบรารีซอฟต์แวร์แบบโอเพนซอร์สของภาษาไพทอนสำหรับการเรียนรู้ของเครื่อง ใช้กับงานเรียนรู้แบบมีผู้สอนและไม่มีผู้สอน เช่น การจำแนก, การถดถอย, การจัดกลุ่ม, การลดมิติ, การเลือกแบบจำลอง และการเตรียมข้อมูลก่อนฝึกโมเดล[1] ไลบรารีนี้ออกแบบให้ทำงานร่วมกับระบบนิเวศการคำนวณเชิงวิทยาศาสตร์ของไพทอน โดยเฉพาะ NumPy, SciPy, Matplotlib และ pandas[2]
scikit-learn เป็นที่รู้จักจากส่วนติดต่อโปรแกรมประยุกต์หรือ API ที่สม่ำเสมอ เช่น รูปแบบ fit, predict, transform และ score ซึ่งทำให้ผู้ใช้สามารถสลับแบบจำลองหรือประกอบกระบวนการเรียนรู้ของเครื่องเป็น pipeline ได้ง่าย[3] เอกสารทางการอธิบาย scikit-learn ว่าเป็น “เครื่องมือเรียบง่ายและมีประสิทธิภาพสำหรับการวิเคราะห์ข้อมูลเชิงทำนาย” และเน้นความเข้าถึงง่าย การนำกลับใช้ซ้ำ และการสร้างบน NumPy, SciPy และ Matplotlib[4]
โครงการเริ่มต้นใน ค.ศ. 2007 จากงาน Google Summer of Code ของเดวิด คูร์นาโป ภายใต้ชื่อ scikits.learn ต่อมาใน ค.ศ. 2010 กลุ่มนักพัฒนาจาก INRIA เข้ามาช่วยดูแลและเผยแพร่รุ่นสาธารณะรุ่นแรก[5] รุ่นเสถียร 1.0 ออกเมื่อวันที่ 24 กันยายน ค.ศ. 2021 และในปัจจุบันรุ่นล่าสุดคือ 1.9.0 ซึ่งเผยแพร่ในเดือนมิถุนายน ค.ศ. 2026[6][2] scikit-learn เป็นโครงการที่ได้รับการสนับสนุนทางการเงินจาก NumFOCUS และ Probabl รวมถึงองค์กรสนับสนุนอื่น ๆ[7][8]
ชื่อ
[แก้]ชื่อ scikit-learn มาจากคำว่า SciKit หรือ “scientific toolkit” ซึ่งเดิมหมายถึงชุดเครื่องมือเสริมของโครงการ SciPy ส่วนคำว่า learn สื่อถึงการเรียนรู้ของเครื่อง[5] ในเอกสารและโค้ด ผู้ใช้มักนำเข้าไลบรารีด้วยชื่อโมดูลว่า sklearn เช่น from sklearn.ensemble import RandomForestClassifier อย่างไรก็ตาม ชื่อโครงการและชื่อแพ็กเกจที่เผยแพร่บน PyPI คือ scikit-learn[2]
ชื่อโครงการเขียนด้วยตัวพิมพ์เล็กทั้งหมดตามตราสินค้าและเอกสารทางการ แต่ในภาษาไทยอาจใช้ “scikit-learn” ตรงตัว และเมื่อจำเป็นต้องขึ้นต้นประโยคสามารถคงรูปเดิมไว้ได้
ลักษณะทั่วไป
[แก้]scikit-learn รวมอัลกอริทึมการเรียนรู้ของเครื่องคลาสสิกจำนวนมากในรูปแบบ API เดียวกัน ตัวอย่างงานหลักได้แก่:
- การจำแนก เช่น logistic regression, k-nearest neighbors, support-vector machines, decision tree, random forest และ gradient boosting
- การถดถอย เช่น linear regression, ridge regression, lasso, support-vector regression และ tree-based regressors
- การจัดกลุ่ม เช่น k-means, DBSCAN, spectral clustering และ Gaussian mixture models
- การลดมิติ เช่น principal component analysis (PCA), manifold learning และ feature selection
- การเตรียมข้อมูล เช่น scaling, normalization, encoding, imputation และ feature extraction
- การเลือกและประเมินแบบจำลอง เช่น cross-validation, grid search, randomized search, metrics และ model selection utilities[9]
ไลบรารีเน้นแบบจำลองสำหรับข้อมูลแบบตารางหรือข้อมูลขนาดกลางมากกว่าการเรียนรู้เชิงลึกขนาดใหญ่ โดยทั่วไป scikit-learn ไม่ได้เป็นเฟรมเวิร์กหลักสำหรับฝึกโครงข่ายประสาทลึกขนาดใหญ่แบบ PyTorch หรือ TensorFlow แต่ยังใช้ร่วมกับเครื่องมือเหล่านั้นได้ในกระบวนการเตรียมข้อมูล การประเมินแบบจำลอง หรือการเปรียบเทียบ baseline
การออกแบบ API
[แก้]จุดเด่นสำคัญของ scikit-learn คือการออกแบบ API ให้เป็นระเบียบและคาดเดาได้ วัตถุหลักที่ใช้ฝึกหรือแปลงข้อมูลเรียกว่า estimator โดยปกติมีเมทอด fit สำหรับเรียนรู้จากข้อมูล ตัวทำนายหรือ predictor มีเมทอด predict สำหรับสร้างผลทำนาย ส่วนตัวแปลงข้อมูลหรือ transformer มีเมทอด transform สำหรับแปลงข้อมูลหลังจากฝึกแล้ว[3]
แนวทางนี้ทำให้แบบจำลองต่างชนิดกันสามารถใช้งานคล้ายกัน ตัวอย่างเช่น ตัวจำแนกแบบ random forest และ support-vector machine ต่างใช้ fit(X, y) เพื่อฝึก และ predict(X) เพื่อทำนายเช่นเดียวกัน ความสม่ำเสมอดังกล่าวช่วยให้เครื่องมืออย่าง Pipeline, GridSearchCV และ cross_val_score ทำงานกับ estimator จำนวนมากได้โดยไม่ต้องเขียนโค้ดเฉพาะสำหรับแต่ละแบบจำลอง
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
model = make_pipeline(
StandardScaler(),
LogisticRegression()
)
model.fit(X_train, y_train)
predicted = model.predict(X_test)
อัลกอริทึมและโมดูลสำคัญ
[แก้]scikit-learn แบ่งฟังก์ชันเป็นโมดูลจำนวนมาก เช่น sklearn.linear_model, sklearn.svm, sklearn.tree, sklearn.ensemble, sklearn.cluster, sklearn.decomposition, sklearn.preprocessing และ sklearn.metrics[9] โครงสร้างนี้ช่วยให้ผู้ใช้เลือกอัลกอริทึมตามประเภทงานได้ง่าย
ตัวอย่างโมดูลที่ใช้บ่อย ได้แก่:
sklearn.linear_modelสำหรับ linear regression, logistic regression, ridge, lasso และ elastic netsklearn.svmสำหรับ support-vector machinessklearn.treeและsklearn.ensembleสำหรับ decision tree, random forest, gradient boosting และ extra-treessklearn.clusterสำหรับ k-means, DBSCAN และ clustering อื่น ๆsklearn.model_selectionสำหรับ cross-validation, train-test split และ hyperparameter searchsklearn.preprocessingสำหรับ scaling, normalization และ encoding ข้อมูลsklearn.metricsสำหรับวัดผล เช่น accuracy, precision, recall, F1, ROC AUC, mean squared error และคะแนนอื่น ๆ
การนำไปใช้
[แก้]scikit-learn เขียนด้วยภาษาไพทอนเป็นหลัก และใช้ NumPy สำหรับโครงสร้างอาร์เรย์กับการคำนวณเชิงเวกเตอร์ ส่วนอัลกอริทึมสำคัญบางส่วนเขียนด้วย Cython, C หรือ C++ เพื่อเพิ่มประสิทธิภาพ[2] support-vector machines ใช้ wrapper รอบ LIBSVM ขณะที่ logistic regression และ linear support-vector machines ใช้ LIBLINEAR ในบางส่วน[10]
scikit-learn ทำงานบนระบบปฏิบัติการหลัก เช่น ลินุกซ์, macOS และ Windows แพ็กเกจบน PyPI ระบุสถานะเป็น Production/Stable และรองรับ Python 3.11, 3.12, 3.13 และ 3.14 ในรุ่นปัจจุบัน พร้อม dependency เช่น NumPy, SciPy, joblib, threadpoolctl และ Narwhals[2] หากติดตั้งผ่าน pip หรือ conda ผู้ใช้มักได้รับ wheel ที่คอมไพล์ไว้ล่วงหน้าสำหรับแพลตฟอร์มหลัก[11]
ประวัติ
[แก้]โครงการเริ่มต้นใน ค.ศ. 2007 เมื่อเดวิด คูร์นาโปพัฒนา scikits.learn เป็นโครงการ Google Summer of Code[5] ชื่อ scikits สะท้อนว่าเป็นชุดเครื่องมือเสริมของ SciPy ต่อมา Matthieu Brucher เข้าร่วมและใช้โครงการนี้เป็นส่วนหนึ่งของงานวิทยานิพนธ์[5]
ใน ค.ศ. 2010 นักพัฒนาจาก INRIA เช่น Fabian Pedregosa, Gaël Varoquaux, Alexandre Gramfort และ Vincent Michel เข้ามาช่วยดูแลโครงการ และเผยแพร่รุ่นสาธารณะรุ่นแรก 0.1 beta ในปลายเดือนมกราคม ค.ศ. 2010[5] บทความวิชาการเรื่อง “Scikit-learn: Machine Learning in Python” ตีพิมพ์ใน Journal of Machine Learning Research ใน ค.ศ. 2011 และกลายเป็นแหล่งอ้างอิงมาตรฐานของโครงการ[1]
ใน ค.ศ. 2021 scikit-learn ออกรุ่น 1.0.0 ซึ่งเป็นหมุดหมายสำคัญของ API และเอกสารประกอบโครงการ[6] ตั้งแต่นั้นมา โครงการยังคงพัฒนาเรื่องประสิทธิภาพ ความเสถียร การรองรับชนิดข้อมูลใหม่ และการเชื่อมต่อกับระบบนิเวศ array สมัยใหม่ รุ่น 1.8 เพิ่มการรองรับ Array API หลายส่วนเพื่อให้ estimator และ metrics บางชนิดใช้อาร์เรย์จาก PyTorch หรือ CuPy ได้โดยตรงในโหมดทดลอง[12] รุ่น 1.9.0 เผยแพร่ในเดือนมิถุนายน ค.ศ. 2026 และเป็นรุ่นเสถียรล่าสุด ณ ขณะเขียนบทความนี้[13]
การรองรับ Array API และการคำนวณบน GPU
[แก้]เดิม scikit-learn ออกแบบมาโดยมี NumPy และ SciPy เป็นแกนหลัก และงานส่วนใหญ่มักรันบน CPU ตั้งแต่รุ่นหลัง ๆ เป็นต้นมา โครงการเริ่มทยอยรองรับ Python Array API standard ซึ่งทำให้บาง estimator และฟังก์ชันสามารถรับ input จากไลบรารีอาร์เรย์อื่น เช่น PyTorch หรือ CuPy ได้[14]
ใน scikit-learn 1.8 เอกสาร release highlights ระบุว่าการรองรับ Array API ช่วยให้ใช้ input array จาก PyTorch และ CuPy โดยตรง และอาจใช้ทรัพยากรบนอุปกรณ์ที่ไม่ใช่ CPU เช่น GPU ได้ในบาง estimator หรือ metrics ที่รองรับ[12] อย่างไรก็ตาม ฟังก์ชันนี้ยังเป็นเชิงทดลอง ต้องเปิดใช้ด้วยการตั้งค่า array_api_dispatch และไม่ได้หมายความว่า scikit-learn ทั้งหมดกลายเป็นไลบรารี GPU เต็มรูปแบบ[14]
การใช้งาน
[แก้]scikit-learn ใช้กว้างในงานวิทยาศาสตร์ข้อมูลและการเรียนรู้ของเครื่อง โดยเฉพาะเมื่อข้อมูลอยู่ในรูปตาราง เช่น ข้อมูลลูกค้า ข้อมูลธุรกรรม ข้อมูลทางการแพทย์ที่ผ่านการแปลงเป็น feature หรือข้อมูลเชิงวิศวกรรม ไลบรารีเหมาะกับการสร้าง baseline, การทดลองโมเดล, การเปรียบเทียบอัลกอริทึม และการประกอบ pipeline ตั้งแต่ preprocessing ไปจนถึง evaluation
ตัวอย่างการใช้ random forest classifier:
from sklearn.ensemble import RandomForestClassifier
X = [[1, 2, 3],
[11, 12, 13]]
y = [0, 1]
clf = RandomForestClassifier(random_state=0)
clf.fit(X, y)
clf.predict([[4, 5, 6]])
ตัวอย่างการแบ่งข้อมูลและประเมินคะแนน:
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=0
)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracy_score(y_test, y_pred)
ข้อจำกัด
[แก้]scikit-learn ไม่ได้ออกแบบมาเป็นไลบรารีสำหรับการเรียนรู้เชิงลึกขนาดใหญ่แบบ PyTorch หรือ TensorFlow และไม่ได้รองรับทุกแบบจำลองที่ใช้ในงาน deep learning สมัยใหม่โดยตรง นอกจากนี้ estimator จำนวนมากคาดหวังข้อมูลที่อยู่ในหน่วยความจำของเครื่องเดียว จึงอาจไม่เหมาะกับข้อมูลขนาดใหญ่มากโดยไม่ใช้เครื่องมืออื่นร่วม เช่น Dask, Spark หรือระบบประมวลผลแบบกระจาย
ข้อจำกัดอีกประการคือประสิทธิภาพขึ้นกับการแทนข้อมูล หากปัญหาไม่สามารถเขียนในรูปอาร์เรย์หรือการคำนวณเชิงเวกเตอร์ได้ดี ผู้ใช้อาจได้ประสิทธิภาพต่ำกว่าที่คาดไว้ และบางขั้นตอนอาจสร้างสำเนาข้อมูลขนาดใหญ่ในหน่วยความจำ จึงต้องระวังเรื่องขนาดข้อมูล การ preprocessing และการเลือกอัลกอริทึม
ความสัมพันธ์กับระบบนิเวศไพทอน
[แก้]scikit-learn เป็นส่วนหนึ่งของระบบนิเวศไพทอนด้านวิทยาศาสตร์ข้อมูล ร่วมกับ NumPy สำหรับอาร์เรย์และการคำนวณเชิงตัวเลข, SciPy สำหรับอัลกอริทึมวิทยาศาสตร์, pandas สำหรับตารางข้อมูล, Matplotlib และ Plotly สำหรับการแสดงผล, Numba หรือ Cython สำหรับเร่งความเร็วบางส่วน และ Jupyter สำหรับการทดลองแบบโต้ตอบ[4][2] ไลบรารีจำนวนมากพยายามทำให้ API เข้ากับ scikit-learn เพื่อให้ใช้งานร่วมกับ pipeline, cross-validation และ model selection ของ scikit-learn ได้ง่าย
ในงานข้อมูลขนาดใหญ่หรือการคำนวณบน GPU อาจใช้ไลบรารีอื่นที่เลียนแบบหรือเชื่อมกับ API ของ scikit-learn เช่น Dask-ML, CuML, XGBoost, LightGBM หรือ imbalanced-learn ทั้งนี้ scikit-learn เองยังคงเป็นเครื่องมือพื้นฐานสำหรับการเรียนรู้ของเครื่องแบบคลาสสิกและการสอน machine learning ด้วยภาษาไพทอน
การกำกับดูแลและการสนับสนุน
[แก้]scikit-learn เป็นโครงการชุมชนที่มี maintainer และ contributor จำนวนมาก เอกสาร “About us” ของโครงการแสดงรายชื่อทีมดูแลหลัก ทีมเอกสาร ทีมประสบการณ์ผู้มีส่วนร่วม และผู้มีส่วนร่วมกิตติมศักดิ์จำนวนมาก[5] โครงการเผยแพร่ภายใต้สัญญาอนุญาต BSD 3-Clause ซึ่งเอื้อให้ใช้ได้ทั้งในงานวิจัย การศึกษา และเชิงพาณิชย์[2]
โครงการได้รับการสนับสนุนจาก NumFOCUS และตั้งแต่ ค.ศ. 2024 มีบริษัท Probabl ซึ่งก่อตั้งขึ้นเพื่อสนับสนุนและให้บริการเชิงพาณิชย์รอบระบบ scikit-learn โดยยังคงพึ่งโครงสร้างชุมชนโอเพนซอร์สและผู้สนับสนุนสถาบันหลายแห่ง[8][15]
รางวัลและการยอมรับ
[แก้]ใน ค.ศ. 2019 scikit-learn ได้รับรางวัล Inria–French Academy of Sciences–Dassault Systèmes Innovation Prize จากผลกระทบในฐานะซอฟต์แวร์เสรีด้านการเรียนรู้ของเครื่อง[16] ใน ค.ศ. 2022 โครงการได้รับ Open Science Award for Open Source Research Software ของฝรั่งเศสในหมวด Community จากคุณภาพทางเทคนิค เครือข่ายผู้มีส่วนร่วม และเอกสารประกอบโครงการ[17]
ดูเพิ่ม
[แก้]อ้างอิง
[แก้]- 1 2 Pedregosa, Fabian; Varoquaux, Gaël; Gramfort, Alexandre; Michel, Vincent; Thirion, Bertrand; Grisel, Olivier; Blondel, Mathieu; Prettenhofer, Peter; Weiss, Ron; Dubourg, Vincent; Vanderplas, Jake; Passos, Alexandre; Cournapeau, David; Brucher, Matthieu; Perrot, Matthieu; Duchesnay, Édouard (2011). "Scikit-learn: Machine Learning in Python". Journal of Machine Learning Research. 12: 2825–2830. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 3 4 5 6 7 "scikit-learn". Python Package Index. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 Buitinck, Lars; Louppe, Gilles; Blondel, Mathieu; Pedregosa, Fabian; Mueller, Andreas; Grisel, Olivier; Niculae, Vlad; Prettenhofer, Peter; Gramfort, Alexandre; Grobler, Jaques; Layton, Robert; Vanderplas, Jake; Joly, Arnaud; Holt, Brian (2013). "API design for machine learning software: experiences from the scikit-learn project". arXiv:1309.0238 [cs.LG].
- 1 2 "scikit-learn: machine learning in Python". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 3 4 5 6 "About us". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "Release History". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "NumFOCUS Sponsored Projects". NumFOCUS. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "Institutional support". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "User Guide". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ ข้อมูลโครงบทความและรายละเอียดการนำไปใช้บางส่วนอ้างจากซอร์สโค้ดบทความภาษาอังกฤษเรื่อง scikit-learn ที่ผู้ใช้อัปโหลด
- ↑ "Installing scikit-learn". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "Release Highlights for scikit-learn 1.8". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Release Highlights for scikit-learn 1.9". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "Array API support (experimental)". scikit-learn developers. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ Lardinois, Frederic (1 กุมภาพันธ์ 2024). "Probabl is a new AI company built around popular library scikit-learn". TechCrunch. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "The 2019 Inria-French Academy of Sciences-Dassault Systèmes Innovation Prize: scikit-learn, a success story for machine learning free software". Inria. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ Badolato, Anne-Marie (7 กุมภาพันธ์ 2022). "Open Science Awards for Open Source Research Software". Ouvrir la Science. สืบค้นเมื่อ 8 กรกฎาคม 2026.
อ่านเพิ่ม
[แก้]- Pedregosa, Fabian; และคณะ (2011). "Scikit-learn: Machine Learning in Python". Journal of Machine Learning Research. 12: 2825–2830.
- Buitinck, Lars; และคณะ (2013). "API design for machine learning software: experiences from the scikit-learn project". arXiv:1309.0238 [cs.LG].
แหล่งข้อมูลอื่น
[แก้]
วิกิมีเดียคอมมอนส์มีสื่อเกี่ยวกับ scikit-learn
- เว็บไซต์ทางการ
- คู่มือผู้ใช้ scikit-learn
- ตัวอย่างการใช้งาน scikit-learn
- ซอร์สโค้ด scikit-learn บน GitHub
- scikit-learn บน Python Package Index