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]

จากผลลัพธ์เราสามารถสังเกตได้ว่ามีคะแนนสำหรับแต่ละแอตทริบิวต์ คะแนนยิ่งสูงความสำคัญของแอตทริบิวต์นั้นสูงขึ้น