ก่อนอ่านบทความนี้แนะนำให้อ่านบทความ Machine Learning คืออะไร ? ก่อนครับ
Scikit-learn เป็นโมดูลสำหรับใช้ทำ Machine Learning และ Data Mining ในภาษาไพทอน
ใช้ 3-Clause BSD license
รองรับทั้ง Python 2 และ Python 3
สามารถติดตั้งได้โดยใช้คำสั่ง pip :
pip install scikit-learn
เมื่อติดตั้งเสร็จแล้วมาเริ่มต้นการทำ Machine Learning ด้วย Scikit-learn กันครับ
รูปภาพแสดงการทำงานของ Scikit-learn
โหลด dataset ตัวอย่าง
มาเริ่มต้นทำ ML กัน อย่างแรกต้องดึงข้อมูลเข้ามาใน python ก่อน เนื่องจากเราไม่ต้องการเสียเวลาสร้างข้อมูลใหม่ จึงดึง dataset ตัวอย่างที่มีอยู่มาใช้งาน ข้อมูลที่เราจะดึงเข้ามาคือ Iris dataset เป็นตัวอย่างฐานข้อมูลดอกไม้ Iris กว่า 150 ชนิด มาพร้อมด้วย sepal length (cm) , sepal width (cm) , petal length (cm) และ petal width (cm)
เดติดภาพ วิกิพีเดีย โดย Radomil[/caption]
มีคุณสมบัติของข้อมูล 4 อย่าง ดังนี้
คุณสมบัติของข้อมูล (Features) ใน Iris dataset: |
|
---|---|
Target classes to predict: |
|
ดึง Iris dataset เข้ามา
>>> from sklearn.datasets import load_iris >>> iris = load_iris() >>> type(iris) <class 'sklearn.datasets.base.Bunch'> >>> iris.keys() dict_keys(['target', 'target_names', 'data', 'DESCR', 'feature_names'])
สามารถดึงข้อมูลมาใช้งานได้โดยใช้คำสั่ง .data
>>> iris.data array([[ 5.1, 3.5, 1.4, 0.2], [ 4.9, 3. , 1.4, 0.2], [ 4.7, 3.2, 1.3, 0.2], [ 4.6, 3.1, 1.5, 0.2], [ 5. , 3.6, 1.4, 0.2], ... [ 5.9, 3. , 5.1, 1.8]])
หากใช้คำสั่ง .data.shape เราก็สามารถรู้ array ของ (จำนวนตัวอย่าง,จำนวนคุณลักษณะ) ได้
>>> iris.data.shape (150, 4)
การเรียนรู้แบบมีผู้สอน (Supervised Learning)
[caption id="" align="aligncenter" width="519"] รูปภาพแสดงแผนผังการเรียนรู้แบบมีผู้สอน Supervised Learning[/caption]
Classification- K Nearest Neighbors
K nearest neighbors (kNN) เป็นหนึ่งในกระบวนการเรียนรู้ที่ง่ายที่สุด : รับค่าใหม่ เป็นข้อมูลที่ไม่รู้จัก โดยค้นหาในฐานข้อมูลที่อ้างอิงสิ่งที่มีคุณลักษณะใกล้เคียง และมอบหมายให้ predominant class
from sklearn import neighbors, datasetsผลลัพธ์
iris = datasets.load_iris()
X, y = iris.data, iris.target # จำนวนตัวอย่าง,จำนวนคุณลักษณะ
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X, y)
# ดอกไม้ iris อะไร ที่มีขนาด 3cm x 5cm และมีขนาดกลีบเลี้ยง 4cm x 2cm
print(iris.target_names[knn.predict([[3, 5, 4, 2]])])
['virginica']
แล้วสามารถบันทึก Classification สิ่งที่ Scikit-learn ได้เรียนรู้ เพื่อให้สามารถเรียกใช้งานหลังจบงานได้ด้วยโมดูล pickle
from sklearn.externals import joblibดึงข้อมูลจาก Classification ที่บันทึกไว้ กลับมาใช้งานต่อ
joblib.dump(knn, 'filename.pkl')
knn = joblib.load('filename.pkl')
การเรียนรู้แบบไม่มีผู้สอน (Unsupervised learning)
เป็นการเรียนรู้ที่ไม่ใช้ labels ใด ๆ ใช้เพียงข้อมูลที่ได้รับ
Dimensionality reduction กับ PCA (Principal Components Analysis)
สรุปย่อ ๆ PCA คือ การหาแกนที่สำคัญเมื่ออ้างอิงจากข้อมูล
เป็นส่วนหนึ่งของ factor analysis แนะนำให้ศึกษา factor analysis ก่อนครับ
เริ่มต้น Dimensionality reduction กับ PCA
from sklearn import decomposition
pca = decomposition.PCA(n_components=2)
pca.fit(iris.data)
X = pca.transform(iris.data)
นำมาแสดงเป็นแผนภาพ
import matplotlib.pyplot as pltผลลัพธ์
plt.scatter(X[:, 0], X[:, 1], c=iris.target)
plt.show()
สีน้ำเงิน คือ Setosa สีเขียว คือ Versicolour สีแดง คือ Virginica
การจัดกลุ่ม (Clustering)
การจัดกลุ่ม (Clustering) เป็นวิธีการหนึ่งที่แบ่งข้อมูลออกเป็นกลุ่ม (cluster) โดยพิจารณาให้แต่ละแถวเสมือนเป็นวัตถุ แล้วจับกลุ่มให้กับวัตถุที่มีความคล้ายคลึงกันอยู่ใน cluster เดียวกัน วัตถุที่อยู่ต่าง cluster จะมีความคล้ายคลึงกันน้อยที่สุด
from sklearn.cluster import KMeans
km = KMeans(3)
km.fit(X)
print(km.cluster_centers_)
plt.scatter(X[:, 0], X[:, 1], c=iris.target)
plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], marker='o', s=100)
plt.show()
ผลลัพธ์
[[-2.64084076 -0.19051995]จุดสีน้ำเงินใหญ่คือ cluster ที่ถูกแบ่ง
[ 0.66443351 0.33029221]
[ 2.34645113 -0.27235455]]
ยินดีด้วยครับตอนนี้คุณได้เป็นนักวิทยาศาสตร์ข้อมูล (Data Scientist) แล้ว :D
อ่านเอกสาร API เพิ่มเติมได้ที่ http://scikit-learn.org/stable/documentation.html
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
Thank you very much
ตอบลบ