ML กับ Python - การเลือกคุณสมบัติข้อมูล
ในบทที่แล้วเราได้ดูรายละเอียดเกี่ยวกับวิธีการประมวลผลล่วงหน้าและเตรียมข้อมูลสำหรับการเรียนรู้ของเครื่อง ในบทนี้ให้เราทำความเข้าใจในรายละเอียดการเลือกคุณสมบัติข้อมูลและแง่มุมต่างๆที่เกี่ยวข้อง
ความสำคัญของการเลือกคุณสมบัติข้อมูล
ประสิทธิภาพของโมเดลแมชชีนเลิร์นนิงเป็นสัดส่วนโดยตรงกับคุณลักษณะข้อมูลที่ใช้ในการฝึกอบรม ประสิทธิภาพของโมเดล ML จะได้รับผลกระทบในทางลบหากคุณสมบัติข้อมูลที่ให้มาไม่เกี่ยวข้อง ในทางกลับกันการใช้คุณลักษณะข้อมูลที่เกี่ยวข้องสามารถเพิ่มความแม่นยำของแบบจำลอง ML ของคุณโดยเฉพาะการถดถอยเชิงเส้นและโลจิสติกส์
ตอนนี้เกิดคำถามว่าการเลือกคุณสมบัติอัตโนมัติคืออะไร? อาจถูกกำหนดให้เป็นกระบวนการด้วยความช่วยเหลือซึ่งเราเลือกคุณลักษณะเหล่านั้นในข้อมูลของเราที่เกี่ยวข้องกับผลลัพธ์หรือตัวแปรการทำนายที่เราสนใจมากที่สุด เรียกอีกอย่างว่าการเลือกแอตทริบิวต์
ต่อไปนี้เป็นประโยชน์บางประการของการเลือกคุณสมบัติอัตโนมัติก่อนที่จะสร้างแบบจำลองข้อมูล -
การดำเนินการเลือกคุณสมบัติก่อนการสร้างแบบจำลองข้อมูลจะช่วยลดการติดตั้งมากเกินไป
การดำเนินการเลือกคุณสมบัติก่อนการสร้างแบบจำลองข้อมูลจะเพิ่มความแม่นยำของแบบจำลอง ML
การดำเนินการเลือกคุณสมบัติก่อนการสร้างแบบจำลองข้อมูลจะช่วยลดเวลาในการฝึกอบรม
เทคนิคการเลือกคุณสมบัติ
ต่อไปนี้เป็นเทคนิคการเลือกคุณสมบัติอัตโนมัติที่เราสามารถใช้เพื่อจำลองข้อมูล ML ใน Python -
Univariate Selection
เทคนิคการเลือกคุณลักษณะนี้มีประโยชน์อย่างมากในการเลือกคุณลักษณะเหล่านั้นด้วยความช่วยเหลือของการทดสอบทางสถิติซึ่งมีความสัมพันธ์กับตัวแปรการทำนายมากที่สุด เราสามารถใช้เทคนิคการเลือกคุณลักษณะที่ไม่แปรผันได้ด้วยความช่วยเหลือของ SelectKBest0class ของไลบรารี Python scikit-learn
Example
ในตัวอย่างนี้เราจะใช้ชุดข้อมูล Pima Indians Diabetes เพื่อเลือกคุณลักษณะ 4 อย่างที่มีคุณสมบัติที่ดีที่สุดด้วยความช่วยเหลือของการทดสอบทางสถิติไคสแควร์
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
ต่อไปเราจะแยกอาร์เรย์ออกเป็นส่วนประกอบอินพุตและเอาต์พุต -
X = array[:,0:8]
Y = array[:,8]
โค้ดบรรทัดต่อไปนี้จะเลือกคุณลักษณะที่ดีที่สุดจากชุดข้อมูล -
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)
นอกจากนี้เรายังสามารถสรุปข้อมูลสำหรับเอาต์พุตได้ตามที่เราเลือก ที่นี่เรากำลังตั้งค่าความแม่นยำเป็น 2 และแสดงแอตทริบิวต์ข้อมูล 4 รายการพร้อมคุณสมบัติที่ดีที่สุดพร้อมกับคะแนนที่ดีที่สุดของแต่ละแอตทริบิวต์ -
set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])
Output
[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[
[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
[ 89. 94. 28.1 21. ]
]
การกำจัดคุณลักษณะแบบวนซ้ำ
ตามชื่อที่แนะนำเทคนิคการเลือกคุณลักษณะ RFE (การกำจัดคุณลักษณะซ้ำ) จะลบแอตทริบิวต์แบบวนซ้ำและสร้างแบบจำลองที่มีคุณลักษณะที่เหลืออยู่ เราสามารถใช้เทคนิคการเลือกคุณสมบัติ RFE ด้วยความช่วยเหลือของคลาส RFE ของไลบรารี scikit-learn Python
ตัวอย่าง
ในตัวอย่างนี้เราจะใช้ RFE กับอัลกอริทึมการถดถอยโลจิสติกส์เพื่อเลือก 3 คุณลักษณะที่ดีที่สุดที่มีคุณลักษณะที่ดีที่สุดจากชุดข้อมูลโรคเบาหวานของ Pima Indians ถึง
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
ต่อไปเราจะแยกอาร์เรย์ออกเป็นส่วนประกอบอินพุตและเอาต์พุต -
X = array[:,0:8]
Y = array[:,8]
โค้ดบรรทัดต่อไปนี้จะเลือกคุณลักษณะที่ดีที่สุดจากชุดข้อมูล -
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")
เอาต์พุต
Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]
เราสามารถเห็นในเอาต์พุตด้านบน RFE เลือก preg, mass และ pedi เป็นคุณสมบัติที่ดีที่สุด 3 อันดับแรก มีการทำเครื่องหมายเป็น 1 ในเอาต์พุต
การวิเคราะห์องค์ประกอบหลัก (PCA)
PCA โดยทั่วไปเรียกว่าเทคนิคการลดข้อมูลเป็นเทคนิคการเลือกคุณลักษณะที่มีประโยชน์มากเนื่องจากใช้พีชคณิตเชิงเส้นเพื่อเปลี่ยนชุดข้อมูลให้อยู่ในรูปแบบบีบอัด เราสามารถใช้เทคนิคการเลือกคุณสมบัติ PCA ด้วยความช่วยเหลือของคลาส PCA ของไลบรารี scikit-learn Python เราสามารถเลือกจำนวนส่วนประกอบหลักในเอาต์พุตได้
ตัวอย่าง
ในตัวอย่างนี้เราจะใช้ PCA เพื่อเลือกส่วนประกอบหลัก 3 อย่างที่ดีที่สุดจากชุดข้อมูล Pima Indians Diabetes
from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
ต่อไปเราจะแยกอาร์เรย์ออกเป็นส่วนประกอบอินพุตและเอาต์พุต -
X = array[:,0:8]
Y = array[:,8]
บรรทัดของโค้ดต่อไปนี้จะดึงคุณสมบัติจากชุดข้อมูล -
pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)
เอาต์พุต
Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[
[
-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02
9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03
]
[
2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02
-9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01
]
[
-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01
2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01
]
]
เราสามารถสังเกตได้จากผลลัพธ์ข้างต้นว่าส่วนประกอบหลัก 3 ส่วนมีความคล้ายคลึงกับแหล่งข้อมูลเล็กน้อย
ความสำคัญของคุณลักษณะ
ตามชื่อที่แนะนำจะใช้เทคนิคความสำคัญของคุณลักษณะเพื่อเลือกคุณลักษณะที่สำคัญ โดยทั่วไปจะใช้ลักษณนามภายใต้การดูแลที่ผ่านการฝึกอบรมเพื่อเลือกคุณสมบัติ เราสามารถใช้เทคนิคการเลือกคุณสมบัตินี้ได้ด้วยความช่วยเหลือของคลาส ExtraTreeClassifier ของไลบรารี scikit-learn Python
ตัวอย่าง
ในตัวอย่างนี้เราจะใช้ ExtraTreeClassifier เพื่อเลือกคุณสมบัติจากชุดข้อมูล Pima Indians Diabetes
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values
ต่อไปเราจะแยกอาร์เรย์ออกเป็นส่วนประกอบอินพุตและเอาต์พุต -
X = array[:,0:8]
Y = array[:,8]
บรรทัดของโค้ดต่อไปนี้จะดึงคุณสมบัติจากชุดข้อมูล -
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)
เอาต์พุต
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
จากผลลัพธ์เราสามารถสังเกตได้ว่ามีคะแนนสำหรับแต่ละแอตทริบิวต์ คะแนนยิ่งสูงความสำคัญของแอตทริบิวต์นั้นสูงขึ้น