Scikit-learn'ning o'lchamlilikni kamaytirish usullari bo'yicha qo'llanma, global ma'lumotlar olimlarini samaraliroq va mustahkam modellar qurishga undaydi.
Scikit-learn xususiyatlarni tanlash: Global ma'lumotlar to'plamlari uchun o'lchamlilikni kamaytirishni o'zlashtirish
Doimiy kengayib borayotgan ma'lumotlar olamida xususiyatlarning ulkan hajmi eng murakkab mashinani o'rganish modellarini ham bo'g'ib qo'yishi mumkin. Ko'pincha "o'lchamlilik la'nati" deb ataladigan bu hodisa hisoblash xarajatlarining oshishiga, model aniqligining pasayishiga va talqin qilish qobiliyatining kamayishiga olib kelishi mumkin. Yaxshiyamki, xususiyatlarni tanlash va o'lchamlilikni kamaytirish usullari kuchli yechimlarni taklif etadi. Python'ning mashinani o'rganish ekotizimining tamal toshi bo'lgan Scikit-learn, ushbu muammolarni samarali hal qilish uchun boy vositalar to'plamini taqdim etadi, bu esa butun dunyo bo'ylab ma'lumotlar olimlari uchun ajralmas manba hisoblanadi.
Ushbu keng qamrovli qo'llanma Scikit-learn'ning xususiyatlarni tanlash imkoniyatlarining murakkabliklarini o'rganib chiqadi, o'lchamlilikni kamaytirishga e'tibor qaratadi. Biz turli metodologiyalarni, ularning asosiy printsiplarini, kod misollari bilan amaliy qo'llanilishini va turli global ma'lumotlar to'plamlari uchun mulohazalarni ko'rib chiqamiz. Bizning maqsadimiz – sizni, ma'lumotlar bilan ishlovchi global auditoriyani, xususiyatlarni tanlash bo'yicha asosli qarorlar qabul qilish uchun bilimlar bilan qurollantirishdir, bu esa yanada samarali, aniq va talqin qilinadigan mashinani o'rganish modellariga olib keladi.
O'lchamlilikni kamaytirishni tushunish
Scikit-learn'ning maxsus vositalariga sho'ng'ishdan oldin, o'lchamlilikni kamaytirishning asosiy tushunchalarini tushunish juda muhimdir. Bu jarayon muhim ma'lumotlarning imkon qadar ko'proq qismini saqlab qolgan holda ma'lumotlarni yuqori o'lchamli fazodan past o'lchamli fazoga o'tkazishni o'z ichiga oladi. Afzalliklari ko'pdir:
- Qayta moslashuvning kamayishi: Kamroq xususiyatlar oddiyroq modelni anglatadi, o'quv ma'lumotlaridagi shovqinlarni o'rganishga kamroq moyil bo'ladi.
- Tezroq o'qitish vaqtlari: Kamroq xususiyatlarga ega modellar sezilarli darajada tezroq o'qitiladi.
- Modelning talqin qilinishi yaxshilandi: Kamroq xususiyatlar orasidagi bog'liqliklarni tushunish osonroq.
- Saqlash joyining kamayishi: Kamroq o'lchamlilik kamroq xotira talab qiladi.
- Shovqinni kamaytirish: Nomuvofiq yoki ortiqcha xususiyatlar bartaraf etilishi mumkin, bu esa toza ma'lumotlarga olib keladi.
O'lchamlilikni kamaytirishni keng ma'noda ikkita asosiy yondashuvga bo'lish mumkin:
1. Xususiyatlarni tanlash
Bu yondashuv mavjud muammoga eng mos keladigan asl xususiyatlarning kichik guruhini tanlashni o'z ichiga oladi. Asl xususiyatlar saqlanib qoladi, ammo ularning soni kamaytiriladi. Uni retsept uchun eng ta'sirli ingredientlarni aniqlash va qolganlarini tashlab yuborish deb o'ylang.
2. Xususiyatlarni ajratib olish
Bu yondashuv asl xususiyatlarni yangi, kichikroq xususiyatlar to'plamiga aylantiradi. Bu yangi xususiyatlar asl xususiyatlarning kombinatsiyalari yoki proyeksiyalari bo'lib, ma'lumotlardagi eng muhim farqni yoki ma'lumotni aks ettirishga qaratilgan. Bu asl ingredientlarning distillangan mohiyatini yaratishga o'xshaydi.
Scikit-learn ushbu ikki yondashuv uchun ham kuchli vositalarni taklif etadi. Biz ko'pincha xususiyatlarni tanlash yoki ajratib olish orqali o'lchamlilikni kamaytirishga hissa qo'shadigan usullarga e'tibor qaratamiz.
Scikit-learn'dagi xususiyatlarni tanlash usullari
Scikit-learn xususiyatlarni tanlashni amalga oshirishning bir necha usullarini taqdim etadi. Bularni keng ma'noda uchta toifaga guruhlash mumkin:
1. Filtr usullari
Filtr usullari xususiyatlarning tegishliligini ularning ichki xususiyatlariga asoslanib baholaydi, bu esa har qanday aniq mashinani o'rganish modelidan mustaqil. Ular odatda tez va hisoblash jihatdan arzon bo'lib, dastlabki ma'lumotlarni o'rganish yoki juda katta ma'lumotlar to'plamlari bilan ishlash uchun idealdir. Umumiy metrikalar qatoriga korrelyatsiya, o'zaro ma'lumot va statistik testlar kiradi.
a) Korrelyatsiyaga asoslangan xususiyatlarni tanlash
Maqsadli o'zgaruvchi bilan yuqori darajada korrelyatsiyalangan xususiyatlar muhim deb hisoblanadi. Aksincha, bir-biri bilan yuqori darajada korrelyatsiyalangan xususiyatlar (ko'p qatorli korrelyatsiya) ortiqcha bo'lishi mumkin va ularni olib tashlash uchun ko'rib chiqish mumkin. Scikit-learn'ning feature_selection moduli bunga yordam berish uchun vositalarni taklif qiladi.
Misol: dispersiya chegarasi
Juda past dispersiyaga ega xususiyatlar ko'p diskriminativ kuchni ta'minlamasligi mumkin. The VarianceThreshold sinfi dispersiyasi ma'lum bir chegaraga to'g'ri kelmaydigan xususiyatlarni olib tashlaydi. Bu raqamli xususiyatlar uchun ayniqsa foydalidir.
from sklearn.feature_selection import VarianceThreshold
import numpy as np
X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
selector = VarianceThreshold(threshold=0.0)
selector.fit_transform(X)
# Output: array([[2, 0, 3], [1, 4, 3], [1, 1, 3]])
Bu misolda, birinchi xususiyat (barchasi nollar) nol dispersiyaga ega va olib tashlanadi. Bu hech qanday bashoratli kuchni taklif qilmaydigan doimiy yoki deyarli doimiy xususiyatlarni tashlab yuborishning oddiy, ammo samarali usulidir.
Misol: Maqsad bilan korrelyatsiya (Pandas va SciPy yordamida)
Scikit-learn barcha xususiyat turlari bo'yicha maqsad bilan korrelyatsiya qilish uchun to'g'ridan-to'g'ri yuqori darajadagi funksiyaga ega bo'lmasa-da, bu keng tarqalgan oldindan qayta ishlash qadamidir. Biz buning uchun Pandas va SciPy'dan foydalanishimiz mumkin.
import pandas as pd
import numpy as np
from scipy.stats import pearsonr
# Sample data
data = {
'feature1': np.random.rand(100),
'feature2': np.random.rand(100) * 2,
'feature3': np.random.rand(100) - 1,
'target': np.random.randint(0, 2, 100)
}
df = pd.DataFrame(data)
# Calculate Pearson correlation with the target
correlations = df.corr()['target'].drop('target')
# Select features with correlation above a certain threshold (e.g., 0.2)
selected_features = correlations[abs(correlations) > 0.2].index.tolist()
print(f"Features correlated with target: {selected_features}")
Bu parcha maqsadli o'zgaruvchi bilan chiziqli bog'liqlikka ega xususiyatlarni qanday aniqlashni ko'rsatadi. Ikkilik maqsadlar uchun nuqta-biserial korrelyatsiya dolzarbdir, kategorik maqsadlar uchun esa boshqa statistik testlar ko'proq mos keladi.
b) Statistik testlar
Filtr usullari xususiyatlar va maqsadli o'zgaruvchi orasidagi bog'liqlikni o'lchash uchun statistik testlarni ham qo'llashi mumkin. Bular kategorik xususiyatlar bilan ishlashda yoki ma'lumotlar taqsimoti haqida aniq farazlar qilinganda ayniqsa foydalidir.
Scikit-learn'ning feature_selection moduli quyidagilarni taqdim etadi:
f_classif: Tasniflash vazifalari uchun yorliq/xususiyat orasidagi ANOVA F-qiymati. Xususiyatlar raqamli va maqsad kategorik deb hisoblanadi.f_regression: Regressiya vazifalari uchun yorliq/xususiyat orasidagi F-qiymati. Xususiyatlar raqamli va maqsad raqamli deb hisoblanadi.mutual_info_classif: Diskret maqsadli o'zgaruvchi uchun o'zaro ma'lumot. Noaniq bog'liqliklarni hal qila oladi.mutual_info_regression: Uzluksiz maqsadli o'zgaruvchi uchun o'zaro ma'lumot.chi2: Tasniflash vazifalari uchun manfiy bo'lmagan xususiyatlarning Chi-kvadrat statistikasi. Kategorik xususiyatlar uchun ishlatiladi.
Misol: `f_classif` va `SelectKBest`dan foydalanish
SelectKBest – tanlangan baholash funksiyasiga (masalan, f_classif kabi) asoslanib xususiyatlarni tanlash imkonini beruvchi meta-transformerdir.
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, f_classif
iris = load_iris()
X, y = iris.data, iris.target
# Select the top 2 features using f_classif
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
print(f"Selected feature names: {[iris.feature_names[i] for i in selected_indices]}")
Bu misol tasniflash uchun statistik ahamiyatiga asoslanib 'k' ta eng yaxshi xususiyatlarni qanday tanlashni ko'rsatadi. f_classif'dagi F-qiymati guruhlar (sinflar) orasidagi dispersiyani guruhlar ichidagi dispersiyaga nisbatan o'lchaydi. Yuqori F-qiymati xususiyat va maqsad o'rtasidagi kuchliroq bog'liqlikni ko'rsatadi.
Global e'tibor: Turli mintaqalardan olingan ma'lumotlar to'plamlari (masalan, turli iqlimlardagi sensor ma'lumotlari, turli iqtisodiy tizimlardagi moliyaviy ma'lumotlar) bilan ishlashda xususiyatlarning statistik xususiyatlari sezilarli darajada farq qilishi mumkin. Ushbu statistik testlarning taxminlarini (masalan, ANOVA uchun normallik) tushunish juda muhimdir va o'zaro ma'lumot kabi no-parametrik testlar turli stsenariylarda yanada mustahkam bo'lishi mumkin.
2. O'ramali usullar
O'ramali usullar xususiyatlar kichik guruhlarining sifatini baholash uchun aniq bir mashinani o'rganish modelidan foydalanadi. Ular optimal xususiyatlar to'plamini topish uchun qidiruv strategiyasi ichida modelni o'qitish jarayonini "o'raydi". Umuman olganda filtr usullaridan aniqroq bo'lsa-da, takroriy modelni o'qitish tufayli ular hisoblash jihatidan ancha qimmatroqdir.
a) Rekursiv xususiyatlarni yo'q qilish (RFE)
RFE xususiyatlarni rekursiv ravishda olib tashlash orqali ishlaydi. U butun xususiyatlar to'plamida modelni o'qitishdan boshlaydi, so'ngra modelning koeffitsientlari yoki xususiyatlarning muhimligiga asoslanib, eng kam muhim xususiyat(lar)ni olib tashlaydi. Bu jarayon kerakli miqdordagi xususiyatlarga erishilgunga qadar takrorlanadi.
from sklearn.datasets import make_classification
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# Generate synthetic data
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
# Use a Logistic Regression model (can be any model that supports coef_ or feature_importances_)
estimator = LogisticRegression(solver='liblinear')
# Initialize RFE to select top 5 features
selector = RFE(estimator, n_features_to_select=5, step=1)
selector = selector.fit(X, y)
X_new = selector.transform(X)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
RFE kuchli, chunki u tanlangan model tomonidan baholangan xususiyatlar orasidagi o'zaro ta'sirlarni hisobga oladi. The `step` parametri har bir iteratsiyada qancha xususiyat olib tashlanishini nazorat qiladi.
b) Ketma-ket xususiyatlarni tanlash (SFS)
Scikit-learn'ning asosiy feature_selection moduli tarkibida to'g'ridan-to'g'ri sinf bo'lmasa-da, Ketma-ket xususiyatlarni tanlash ko'pincha Scikit-learn estimatorlaridan foydalanib amalga oshiriladigan kontseptual yondashuvdir. Bu Oldinga tanlash (bo'sh to'plamdan boshlab va xususiyatlarni birma-bir qo'shish) yoki Orqaga yo'q qilish (barcha xususiyatlardan boshlab va ularni birma-bir olib tashlash)ni o'z ichiga oladi. Scikit-learn'ning sklearn.feature_selection modulidagi SequentialFeatureSelector buni amalga oshiradi.
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
estimator = LogisticRegression(solver='liblinear')
# Forward selection: add features until desired number is reached
sfs_forward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='forward', cv=5)
sfs_forward.fit(X, y)
X_new_forward = sfs_forward.transform(X)
print(f"Forward Selection - Reduced shape: {X_new_forward.shape}")
# Backward selection: start with all features and remove
sfs_backward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='backward', cv=5)
sfs_backward.fit(X, y)
X_new_backward = sfs_backward.transform(X)
print(f"Backward Selection - Reduced shape: {X_new_backward.shape}")
The cv parametri SequentialFeatureSelector'dagi kross-validatsiyani anglatadi, bu esa xususiyatlarni tanlashni yanada mustahkam va o'quv ma'lumotlariga qayta moslashuvga kamroq moyil qilishga yordam beradi. Bu usullarni global miqyosda qo'llashda juda muhim e'tiborga olish kerak, chunki ma'lumotlar sifati va taqsimoti juda farq qilishi mumkin.
3. O'rnatilgan usullar
O'rnatilgan usullar modelni o'qitish jarayonining bir qismi sifatida xususiyatlarni tanlashni amalga oshiradi. Ular o'ramali usullarga qaraganda hisoblash jihatdan arzonroq bo'lish afzalligiga ega, shu bilan birga xususiyatlar o'zaro ta'sirlarini ham hisobga oladi. Ko'plab tartibga solingan modellar ushbu toifaga kiradi.
a) L1 Regulyarizatsiyasi (Lasso)
Chiziqli modellardagi Lasso (Eng kichik mutlaq qisqartirish va tanlash operatori) kabi modellar L1 regulyarizatsiyasidan foydalanadi. Bu usul koeffitsientlarning mutlaq qiymatiga jarima qo'shadi, bu esa ba'zi koeffitsientlarni aniq nolga keltirishi mumkin. Nol koeffitsientlarga ega xususiyatlar samarali ravishda olib tashlanadi.
from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, n_informative=10, random_state=42, noise=10)
# Lasso with alpha (regularization strength)
# A higher alpha leads to more regularization and potentially more zero coefficients
lasso = Lasso(alpha=0.1, random_state=42)
lasso.fit(X, y)
# Get the number of non-zero coefficients (selected features)
non_zero_features = np.sum(lasso.coef_ != 0)
print(f"Number of features selected by Lasso: {non_zero_features}")
# To get the actual selected features:
selected_features_mask = lasso.coef_ != 0
X_new = X[:, selected_features_mask]
print(f"Reduced shape: {X_new.shape}")
LassoCV kross-validatsiya orqali optimal alfa qiymatini avtomatik ravishda topish uchun ishlatilishi mumkin.
b) Daraxtga asoslangan xususiyatlarning muhimligi
RandomForestClassifier, GradientBoostingClassifier va ExtraTreesClassifier kabi ansambl usullari xususiyatlarning muhimligini o'z-o'zidan taqdim etadi. Bular har bir xususiyatning ansambldagi daraxtlar bo'ylab nopoklik yoki xatoni kamaytirishga qancha hissa qo'shishiga asoslanib hisoblanadi. Muhimligi past bo'lgan xususiyatlar olib tashlanishi mumkin.
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
# Get feature importances
importances = model.feature_importances_
# Sort features by importance
indices = np.argsort(importances)[::-1]
print("Feature ranking:")
for f in range(X.shape[1]):
print(f"{f + 1}. feature {indices[f]} ({cancer.feature_names[indices[f]]}) - {importances[indices[f]]:.4f}")
# Select top N features (e.g., top 10)
N = 10
selected_features_mask = np.zeros(X.shape[1], dtype=bool)
selected_features_mask[indices[:N]] = True
X_new = X[:, selected_features_mask]
print(f"Reduced shape after selecting top {N} features: {X_new.shape}")
Daraxtga asoslangan usullar kuchli, chunki ular no-chiziqli bog'liqliklar va xususiyatlar o'zaro ta'sirlarini aks ettira oladi. Ular tibbiy diagnostikadan (misolda bo'lgani kabi) turli bozorlardagi moliyaviy firibgarlikni aniqlashgacha bo'lgan turli sohalarda keng qo'llaniladi.
O'lchamlilikni kamaytirish uchun xususiyatlarni ajratib olish
Xususiyatlarni tanlash asl xususiyatlarni saqlab qolgan bo'lsa, xususiyatlarni ajratib olish yangi, kamaytirilgan xususiyatlar to'plamini yaratadi. Bu ayniqsa asl xususiyatlar yuqori darajada korrelyatsiyalangan bo'lsa yoki ma'lumotlarni eng ko'p dispersiyani aks ettiruvchi pastroq o'lchamli fazoga proyeksiyalashni xohlaganingizda foydalidir.
1. Asosiy komponentlar tahlili (PCA)
PCA — ma'lumotlardagi maksimal dispersiyani aks ettiruvchi ortogonal o'qlar (asosiy komponentlar) to'plamini topishga qaratilgan chiziqli transformatsiya usulidir. Birinchi asosiy komponent eng ko'p dispersiyani, ikkinchisi keyingi eng ko'p (birinchisiga ortogonal) dispersiyani va hokazolarni aks ettiradi. Faqat birinchi 'k' ta asosiy komponentlarni saqlab qolish orqali biz o'lchamlilikni kamaytiramiz.
Muhim eslatma: PCA xususiyatlar shkalasiga sezgir. PCA'ni qo'llashdan oldin ma'lumotlaringizni masshtablash (masalan, StandardScaler yordamida) juda muhimdir.
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.datasets import load_wine
wine = load_wine()
X, y = wine.data, wine.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after PCA: {X_pca.shape}")
# The explained variance ratio shows how much variance each component captures
print(f"Explained variance ratio: {pca.explained_variance_ratio_}")
print(f"Total explained variance: {np.sum(pca.explained_variance_ratio_):.4f}")
PCA yuqori o'lchamli ma'lumotlarni 2 yoki 3 o'lchamga kamaytirish orqali vizualizatsiya qilish uchun juda yaxshi. Bu tadqiqiy ma'lumotlar tahlilidagi asosiy texnika bo'lib, keyingi modellashtirish bosqichlarini sezilarli darajada tezlashtirishi mumkin. Uning samaradorligi tasvirni qayta ishlash va genetika kabi sohalarda kuzatiladi.
2. Chiziqli diskriminant tahlili (LDA)
Nazoratsiz bo'lgan va dispersiyani maksimal darajada oshirishga qaratilgan PCA'dan farqli o'laroq, LDA sinflar orasidagi ajralishni maksimal darajada oshiradigan past o'lchamli tasvirni topishga qaratilgan nazoratli usuldir. U asosan tasniflash vazifalari uchun ishlatiladi.
Muhim eslatma: LDA ham xususiyatlarni masshtablashni talab qiladi. Bundan tashqari, LDA'dagi komponentlar soni ko'pi bilan n_classes - 1 bilan cheklangan.
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize LDA. Number of components cannot exceed n_classes - 1 (which is 2 for Iris)
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after LDA: {X_lda.shape}")
# LDA also has explained_variance_ratio_ but it's class separability
print(f"Explained variance ratio (class separability): {lda.explained_variance_ratio_}")
LDA ma'lumotlaringizdagi turli toifalar orasini yaxshi ajrata oladigan tasniflagich yaratish maqsad qilinganida ayniqsa foydalidir, bu esa mijozlarni segmentlash yoki kasalliklarni tasniflash kabi ko'plab global ilovalarda keng tarqalgan muammodir.
3. t-Taqsimlangan stokastik qo'shni joylashtirish (t-SNE)
t-SNE – yuqori o'lchamli ma'lumotlar to'plamlarini vizualizatsiya qilish uchun asosan ishlatiladigan no-chiziqli o'lchamlilikni kamaytirish usulidir. U yuqori o'lchamli ma'lumotlar nuqtalarini past o'lchamli fazoga (odatda 2D yoki 3D) shunday aks ettirish orqali ishlaydi, bunda o'xshash nuqtalar past o'lchamli fazoda o'xshash masofalar bilan modellashtiriladi. U ma'lumotlar ichidagi mahalliy tuzilmani va klasterlarni aniqlashda juda yaxshi.
Muhim eslatma: t-SNE hisoblash jihatidan qimmat va odatda modelni o'qitish uchun oldindan qayta ishlash bosqichi sifatida emas, balki vizualizatsiya uchun ishlatiladi. Natijalar turli tasodifiy boshlang'ich qiymatlar va parametr sozlamalari bilan ham farq qilishi mumkin.
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()
X, y = digits.data, digits.target
# For demonstration, we'll use a subset of the data as t-SNE can be slow
subset_indices = np.random.choice(len(X), 1000, replace=False)
X_subset = X[subset_indices]
y_subset = y[subset_indices]
# Initialize t-SNE with 2 components
# perplexity is related to the number of nearest neighbors (e.g., 30 is common)
# n_iter is the number of iterations for optimization
tsne = TSNE(n_components=2, perplexity=30, n_iter=300, random_state=42)
X_tsne = tsne.fit_transform(X_subset)
print(f"Original subset shape: {X_subset.shape}")
print(f"Reduced shape after t-SNE: {X_tsne.shape}")
# Plotting the results (optional, for visualization)
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y_subset, cmap='viridis', alpha=0.7)
plt.title('t-SNE visualization of Digits dataset')
plt.xlabel('t-SNE component 1')
plt.ylabel('t-SNE component 2')
plt.legend(*scatter.legend_elements(), title='Classes')
plt.show()
t-SNE genomika yoki ijtimoiy tarmoq tahlili kabi sohalarda uchraydigan murakkab, yuqori o'lchamli ma'lumotlarning ichki tuzilishini tushunish uchun bebaho bo'lib, aks holda yashirin qolishi mumkin bo'lgan naqshlarga vizual tushunchalar beradi.
Global ma'lumotlar to'plamlari uchun to'g'ri usulni tanlash
Tegishli xususiyatlarni tanlash yoki ajratib olish usulini tanlash hamma holatlarga mos keladigan yechim emas. Bir qator omillar, ayniqsa global ma'lumotlar to'plamlari uchun muhim bo'lib, bu tanlovga ta'sir qiladi:
- Ma'lumotlarning tabiati: Ma'lumotlaringiz raqamli, kategorik yoki aralashmi? Ma'lum taqsimotlar bormi? Masalan,
chi2manfiy bo'lmagan kategorik xususiyatlar uchun mos keladi,f_classifesa raqamli xususiyatlar va kategorik maqsad uchun. - Model turi: Chiziqli modellar L1 regulyarizatsiyasidan foyda ko'rishi mumkin, daraxtga asoslangan modellar esa muhimlikni tabiiy ravishda ta'minlaydi.
- Hisoblash resurslari: Filtr usullari eng tezkor, keyin o'rnatilgan usullar, so'ngra o'ramali usullar va t-SNE.
- Talqin qilinish talablari: Agar bashorat *nima uchun* qilinganini tushuntirish eng muhim bo'lsa, asl xususiyatlarni saqlab qoladigan (RFE yoki L1 kabi) xususiyatlarni tanlash usullari, abstrakt komponentlar yaratadigan (PCA kabi) xususiyatlarni ajratib olish usullariga nisbatan afzal ko'riladi.
- Chiziqlilik va no-chiziqlilik: PCA va chiziqli modellar chiziqli bog'liqliklarni taxmin qiladi, t-SNE va daraxtga asoslangan usullar esa no-chiziqli naqshlarni aks ettira oladi.
- Nazoratli va nazoratsiz: LDA nazoratli (maqsadli o'zgaruvchidan foydalanadi), PCA esa nazoratsiz.
- Shkala va birliklar: PCA va LDA uchun xususiyatlarni masshtablash juda muhimdir. Turli global mintaqalardan to'plangan ma'lumotlardagi shkala farqlarini hisobga oling. Masalan, valyuta qiymatlari yoki sensor ko'rsatkichlari turli mamlakatlar yoki sensor turlari bo'ylab juda farq qilishi mumkin.
- Madaniy va mintaqaviy nozikliklar: Turli madaniy kontekstlardagi inson xulq-atvori, demografiya yoki hissiyotlarni o'z ichiga olgan ma'lumotlar to'plamlari bilan ishlashda xususiyatlarni talqin qilish murakkab bo'lishi mumkin. Bir mintaqada juda bashoratli bo'lgan xususiyat, turli ijtimoiy normalar, iqtisodiy sharoitlar yoki ma'lumotlar yig'ish metodologiyalari tufayli boshqa mintaqada ahamiyatsiz yoki hatto chalg'ituvchi bo'lishi mumkin. Turli populyatsiyalar bo'ylab xususiyatlarning muhimligini baholashda har doim soha ekspertizasini hisobga oling.
Amaliy tushunchalar:
- Oddiylikdan boshlang: Tez baholash va aniq shovqinlarni olib tashlash uchun filtr usullaridan (masalan, dispersiya chegarasi, statistik testlar) boshlang.
- Takrorlang va baholang: Turli usullar bilan tajriba o'tkazing va tegishli metrikalar va kross-validatsiya yordamida ularning modelingiz ishlashiga ta'sirini baholang.
- Vizualizatsiya qiling: Ma'lumotlaringizni past o'lchamlarda vizualizatsiya qilish uchun PCA yoki t-SNE kabi usullardan foydalaning, bu esa asosiy tuzilmalarni ochib berishi va xususiyatlarni tanlash strategiyangizni shakllantirishi mumkin.
- Soha ekspertizasi muhim: Ayniqsa murakkab global ma'lumotlar bilan ishlashda xususiyatlarning ma'nosini va dolzarbligini tushunish uchun soha ekspertlari bilan hamkorlik qiling.
- Ansambl yondashuvlarini ko'rib chiqing: Bir nechta xususiyatlarni tanlash usullarini birlashtirish ba'zida bitta usulga tayanib olingan natijalardan yaxshiroq natijalar berishi mumkin.
Scikit-learn'ning integratsiyalashgan ish oqimi uchun quvur liniyasi
Scikit-learn'ning Pipeline obyekti oldindan qayta ishlash bosqichlarini, shu jumladan xususiyatlarni tanlash/ajratib olishni, modelni o'qitish bilan birlashtirish uchun juda foydali. Bu sizning xususiyatlarni tanlashingiz kross-validatsiyaning har bir katlamida izchil bajarilishini ta'minlaydi, ma'lumotlarning sizib chiqishini oldini oladi va yanada ishonchli natijalarni beradi. Bu turli global bozorlarda joylashtiriladigan modellar qurishda ayniqsa muhimdir.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.datasets import load_breast_cancer
bc = load_breast_cancer()
X, y = bc.data, bc.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Create a pipeline that first scales, then selects features, then trains a classifier
pipe = Pipeline([
('scaler', StandardScaler()),
('selector', SelectKBest(score_func=f_classif, k=10)),
('classifier', LogisticRegression(solver='liblinear'))
])
# Train the pipeline
pipe.fit(X_train, y_train)
# Evaluate the pipeline using cross-validation
cv_scores = cross_val_score(pipe, X_train, y_train, cv=5)
print(f"Cross-validation scores: {cv_scores}")
print(f"Average CV score: {np.mean(cv_scores):.4f}")
# Make predictions on the test set
accuracy = pipe.score(X_test, y_test)
print(f"Test set accuracy: {accuracy:.4f}")
Quvur liniyalaridan foydalanish butun jarayon – masshtablashdan tortib, xususiyatlarni tanlashgacha, tasniflashgacha – bitta obyekt sifatida ko'rib chiqilishini ta'minlaydi. Bu mustahkam modelni ishlab chiqish uchun eng yaxshi amaliyotdir, ayniqsa modellar turli ma'lumotlar taqsimotlarida izchil ishlashi asosiy bo'lgan global joylashtirish uchun mo'ljallangan bo'lsa.
Xulosa
Xususiyatlarni tanlash va ajratib olish orqali o'lchamlilikni kamaytirish samarali, mustahkam va talqin qilinadigan mashinani o'rganish modellarini yaratishda juda muhim qadamdir. Scikit-learn ushbu muammolarni hal qilish uchun keng qamrovli vositalar to'plamini taqdim etadi, bu esa butun dunyo bo'ylab ma'lumotlar olimlarini kuchaytiradi. Turli metodologiyalarni – filtr, o'ramali, o'rnatilgan usullar va PCA va LDA kabi xususiyatlarni ajratib olish usullarini tushunish orqali siz o'zingizning aniq ma'lumotlar to'plamingiz va maqsadlaringizga mos keladigan asosli qarorlar qabul qilishingiz mumkin.
Global auditoriyamiz uchun e'tiborga olinadigan narsalar faqat algoritmlarni tanlashdan tashqariga chiqadi. Ma'lumotlarning kelib chiqishini, turli mintaqalardan xususiyatlar yig'ish orqali kiritilgan potentsial xatarlarni va mahalliy manfaatdor tomonlarning o'ziga xos talqin qilinish ehtiyojlarini tushunish juda muhimdir. Scikit-learn'ning Pipeline kabi vositalaridan foydalanish tuzilmali va takrorlanadigan ish oqimini ta'minlaydi, bu esa turli xalqaro kontekstlarda ishonchli AI yechimlarini joylashtirish uchun zarurdir.
Zamonaviy ma'lumotlar fanining murakkabliklarida harakatlanar ekansiz, Scikit-learn'ning xususiyatlarni tanlash imkoniyatlarini o'zlashtirish shubhasiz muhim boylik bo'ladi, bu sizga ma'lumotlaringizning to'liq salohiyatini ochishga imkon beradi, uning kelib chiqishidan qat'i nazar.