Rumah > Artikel > Peranti teknologi > Sembilan kaedah analisis kepentingan ciri Python yang biasa digunakan
Analisis kepentingan ciri digunakan untuk memahami kegunaan atau nilai setiap ciri (pembolehubah atau input) dalam membuat ramalan. Matlamatnya adalah untuk mengenal pasti ciri paling penting yang mempunyai kesan terbesar pada output model, dan ia merupakan kaedah yang sering digunakan dalam pembelajaran mesin.
Jika anda mempunyai set data dengan berdozen atau bahkan ratusan ciri, setiap ciri mungkin mempunyai sumbangan kepada prestasi model pembelajaran mesin anda. Tetapi tidak semua ciri dicipta sama. Sesetengahnya mungkin berlebihan atau tidak relevan, yang meningkatkan kerumitan pemodelan dan boleh menyebabkan pemasangan berlebihan.
Analisis kepentingan ciri boleh mengenal pasti dan menumpukan pada ciri yang paling bermaklumat, menghasilkan kelebihan berikut: 1. Berikan cerapan: Dengan menganalisis kepentingan ciri, kami boleh mendapatkan cerapan tentang ciri dalam data yang mempunyai kesan paling besar pada hasil, sekali gus membantu kami memahami sifat data dengan lebih baik. 2. Optimumkan model: Dengan mengenal pasti ciri utama, kami boleh mengoptimumkan prestasi model, mengurangkan overhed pengkomputeran dan storan yang tidak diperlukan, dan meningkatkan kecekapan latihan dan ramalan model. 3. Pemilihan ciri: Analisis kepentingan ciri boleh membantu kami memilih ciri dengan kuasa ramalan yang paling tinggi, dengan itu meningkatkan ketepatan dan keupayaan generalisasi model. 4. Terangkan model: Analisis kepentingan ciri juga boleh membantu kami menerangkan hasil ramalan model, mendedahkan corak dan hubungan sebab di sebalik model dan meningkatkan kebolehtafsiran model Bersama
1. Pilih Pilih Kepentingan Kepentingan
from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomForestClassifier from sklearn.inspection import permutation_importance from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=1) rf = RandomForestClassifier(n_estimators=100, random_state=1) rf.fit(X_train, y_train) baseline = rf.score(X_test, y_test) result = permutation_importance(rf, X_test, y_test, n_repeats=10, random_state=1, scoring='accuracy') importances = result.importances_mean # Visualize permutation importances plt.bar(range(len(importances)), importances) plt.xlabel('Feature Index') plt.ylabel('Permutation Importance') plt.show()
2. Kepentingan ciri terbina dalam (coef_ atau feature_importances_)
Sesetengah model, seperti regresi linear dan hutan rawak secara langsung Output markah kepentingan ciri. Ini menunjukkan sumbangan setiap ciri kepada ramalan akhir.
from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomForestClassifier X, y = load_breast_cancer(return_X_y=True) rf = RandomForestClassifier(n_estimators=100, random_state=1) rf.fit(X, y) importances = rf.feature_importances_ # Plot importances plt.bar(range(X.shape[1]), importances) plt.xlabel('Feature Index') plt.ylabel('Feature Importance') plt.show()
3, Tinggalkan satu keluar
Alih keluar satu ciri pada satu masa dan nilai ketepatannya.
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt import numpy as np # Load sample data X, y = load_breast_cancer(return_X_y=True) # Split data into train and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # Train a random forest model rf = RandomForestClassifier(n_estimators=100, random_state=1) rf.fit(X_train, y_train) # Get baseline accuracy on test data base_acc = accuracy_score(y_test, rf.predict(X_test)) # Initialize empty list to store importances importances = [] # Iterate over all columns and remove one at a time for i in range(X_train.shape[1]):X_temp = np.delete(X_train, i, axis=1)rf.fit(X_temp, y_train)acc = accuracy_score(y_test, rf.predict(np.delete(X_test, i, axis=1)))importances.append(base_acc - acc) # Plot importance scores plt.bar(range(len(importances)), importances) plt.show()
4. Analisis korelasi
Kandungan yang perlu ditulis semula ialah: Kira korelasi antara ciri dan pembolehubah sasaran, semakin penting ciri tersebut
5. Penghapusan Ciri Rekursifimport pandas as pd from sklearn.datasets import load_breast_cancer X, y = load_breast_cancer(return_X_y=True) df = pd.DataFrame(X, columns=range(30)) df['y'] = y correlations = df.corrwith(df.y).abs() correlations.sort_values(ascending=False, inplace=True) correlations.plot.bar()
Kepentingan
from sklearn.ensemble import RandomForestClassifier from sklearn.feature_selection import RFE import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as plt X, y = load_breast_cancer(return_X_y=True) df = pd.DataFrame(X, columns=range(30)) df['y'] = y rf = RandomForestClassifier() rfe = RFE(rf, n_features_to_select=10) rfe.fit(X, y) print(rfe.ranking_)
7. Analisis komponen utama PCA
import xgboost as xgb import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as plt X, y = load_breast_cancer(return_X_y=True) df = pd.DataFrame(X, columns=range(30)) df['y'] = y model = xgb.XGBClassifier() model.fit(X, y) importances = model.feature_importances_ importances = pd.Series(importances, index=range(X.shape[1])) importances.plot.bar()
8. Analisis varians ANOVA
from sklearn.decomposition import PCA import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as plt X, y = load_breast_cancer(return_X_y=True) df = pd.DataFrame(X, columns=range(30)) df['y'] = y pca = PCA() pca.fit(X) plt.bar(range(pca.n_components_), pca.explained_variance_ratio_) plt.xlabel('PCA components') plt.ylabel('Explained Variance')
9. Ujian khi kuasa dua
from sklearn.feature_selection import chi2 import pandas as pd from sklearn.datasets import load_breast_cancer import matplotlib.pyplot as plt X, y = load_breast_cancer(return_X_y=True) df = pd.DataFrame(X, columns=range(30)) df['y'] = y chi_scores = chi2(X, y) chi_scores = pd.Series(chi_scores[0], index=range(X.shape[1])) chi_scores.plot.bar()
由于不同的特征重要性方法,有时可以确定哪些特征是最重要的
有的使用不同特特征进行预测,监控精度下降
像XGBOOST或者回归模型使用内置重要性来进行特征的重要性排序
而PCA着眼于方差解释
线性模型偏向于处理线性关系,而树模型则更倾向于捕捉接近根节点的特征
有些方法可以获取特征之间的相互关系,而有些方法则不行,这会导致结果的不同
使用不同的数据子集,重要性值可能在同一方法的不同运行中有所不同,这是因为数据差异决定的
通过调整超参数,例如主成分分析(PCA)组件或决策树的深度,也会对结果产生影响
所以不同的假设、偏差、数据处理和方法的可变性意味着它们并不总是在最重要的特征上保持一致。
Atas ialah kandungan terperinci Sembilan kaedah analisis kepentingan ciri Python yang biasa digunakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!