సైకిట్-లెర్న్ ఫీచర్ ఎంపిక పద్ధతులపై సమగ్ర మార్గదర్శి, డైమెన్షనాలిటీ తగ్గింపు ద్వారా ప్రపంచవ్యాప్త డేటా సైన్స్ నిపుణులను సమర్థవంతమైన, బలమైన మోడళ్లను నిర్మించడానికి శక్తివంతం చేస్తుంది.
సైకిట్-లెర్న్ ఫీచర్ ఎంపిక: గ్లోబల్ డేటాసెట్ల కోసం డైమెన్షనాలిటీ తగ్గింపులో ప్రావీణ్యం పొందడం
డేటా యొక్క నిరంతరం విస్తరిస్తున్న విశ్వంలో, ఫీచర్ల యొక్క అధిక పరిమాణం అత్యంత అధునాతన మెషిన్ లెర్నింగ్ మోడళ్లను కూడా అధికం చేయగలదు. ఈ దృగ్విషయాన్ని తరచుగా "డైమెన్షనాలిటీ శాపం" అని పిలుస్తారు, ఇది అధిక గణన ఖర్చులు, తగ్గిన మోడల్ ఖచ్చితత్వం మరియు అర్థం చేసుకునే సామర్థ్యాన్ని తగ్గిస్తుంది. అదృష్టవశాత్తూ, ఫీచర్ ఎంపిక మరియు డైమెన్షనాలిటీ తగ్గింపు పద్ధతులు శక్తివంతమైన పరిష్కారాలను అందిస్తాయి. పైథాన్ యొక్క మెషిన్ లెర్నింగ్ ఎకోసిస్టమ్లో మూలస్తంభమైన సైకిట్-లెర్న్, ఈ సవాళ్లను సమర్థవంతంగా ఎదుర్కోవడానికి అనేక రకాల సాధనాలను అందిస్తుంది, ఇది ప్రపంచవ్యాప్తంగా ఉన్న డేటా సైంటిస్టులకు అనివార్యమైన వనరుగా మారుతుంది.
ఈ సమగ్ర మార్గదర్శి సైకిట్-లెర్న్ యొక్క ఫీచర్ ఎంపిక సామర్థ్యాల చిక్కులను వివరిస్తుంది, డైమెన్షనాలిటీ తగ్గింపుపై దృష్టి సారిస్తుంది. మేము వివిధ పద్ధతులు, వాటి అంతర్లీన సూత్రాలు, కోడ్ ఉదాహరణలతో ఆచరణాత్మక అమలు మరియు విభిన్న గ్లోబల్ డేటాసెట్ల కోసం పరిశీలనలను అన్వేషిస్తాము. మా లక్ష్యం ఏమిటంటే, ఆశావహ మరియు అనుభవజ్ఞులైన డేటా ప్రాక్టీషనర్ల యొక్క మా గ్లోబల్ ప్రేక్షకులను, ఫీచర్ ఎంపిక గురించి సమాచారంతో కూడిన నిర్ణయాలు తీసుకోవడానికి అవసరమైన జ్ఞానంతో సన్నద్ధం చేయడం, ఇది మరింత సమర్థవంతమైన, ఖచ్చితమైన మరియు అర్థం చేసుకోగలిగే మెషిన్ లెర్నింగ్ మోడళ్లకు దారితీస్తుంది.
డైమెన్షనాలిటీ తగ్గింపును అర్థం చేసుకోవడం
సైకిట్-లెర్న్ యొక్క నిర్దిష్ట సాధనాల్లోకి మనం వెళ్లే ముందు, డైమెన్షనాలిటీ తగ్గింపు యొక్క ప్రాథమిక భావనలను గ్రహించడం చాలా ముఖ్యం. ఈ ప్రక్రియ అధిక-డైమెన్షనల్ స్పేస్ నుండి తక్కువ-డైమెన్షనల్ స్పేస్లోకి డేటాను మార్చడం, వీలైనంత ఎక్కువ ముఖ్యమైన సమాచారాన్ని సంరక్షించడం. దీని ప్రయోజనాలు అనేకమైనవి:
- ఓవర్ఫిట్టింగ్ తగ్గింపు: తక్కువ ఫీచర్లు అంటే సరళమైన మోడల్, శిక్షణ డేటాలోని శబ్దాన్ని నేర్చుకోవడానికి తక్కువ అవకాశం ఉంటుంది.
- వేగవంతమైన శిక్షణ సమయాలు: తక్కువ ఫీచర్లతో ఉన్న మోడళ్లు గణనీయంగా వేగంగా శిక్షణ పొందుతాయి.
- మెరుగైన మోడల్ ఇంటర్ప్రెటబిలిటీ: తక్కువ ఫీచర్ల మధ్య సంబంధాలను అర్థం చేసుకోవడం సులభం.
- తగ్గిన నిల్వ స్థలం: తక్కువ డైమెన్షనాలిటీకి తక్కువ మెమరీ అవసరం.
- శబ్దం తగ్గింపు: అనవసరమైన లేదా పునరావృత ఫీచర్లను తొలగించవచ్చు, ఇది పరిశుభ్రమైన డేటాకు దారితీస్తుంది.
డైమెన్షనాలిటీ తగ్గింపును విస్తృతంగా రెండు ప్రధాన విధానాలుగా వర్గీకరించవచ్చు:
1. ఫీచర్ ఎంపిక
ఈ విధానంలో, ప్రస్తుత సమస్యకు అత్యంత సముచితమైన అసలు ఫీచర్ల సబ్సెట్ను ఎంచుకోవడం ఉంటుంది. అసలు ఫీచర్లు అలాగే ఉంచబడతాయి, కానీ వాటి సంఖ్య తగ్గించబడుతుంది. దీనిని ఒక వంటకం కోసం అత్యంత ప్రభావవంతమైన పదార్థాలను గుర్తించి, మిగిలిన వాటిని విస్మరించడం లాంటిదిగా భావించండి.
2. ఫీచర్ ఎక్స్ట్రాక్షన్
ఈ విధానం అసలు ఫీచర్లను కొత్త, చిన్న ఫీచర్ల సమితిగా మారుస్తుంది. ఈ కొత్త ఫీచర్లు అసలు వాటి యొక్క కలయికలు లేదా ప్రొజెక్షన్లు, డేటాలో అత్యంత ముఖ్యమైన వైవిధ్యాన్ని లేదా సమాచారాన్ని సంగ్రహించే లక్ష్యంతో ఉంటాయి. ఇది అసలు పదార్థాల యొక్క స్వేదనం చేయబడిన సారాంశాన్ని సృష్టించడం లాంటిది.
సైకిట్-లెర్న్ ఈ రెండు విధానాలకు శక్తివంతమైన సాధనాలను అందిస్తుంది. మేము డైమెన్షనాలిటీ తగ్గింపుకు దోహదపడే పద్ధతులపై దృష్టి సారిస్తాము, తరచుగా ఫీచర్ ఎంపిక లేదా ఎక్స్ట్రాక్షన్ ద్వారా.
సైకిట్-లెర్న్లో ఫీచర్ ఎంపిక పద్ధతులు
ఫీచర్ ఎంపికను నిర్వహించడానికి సైకిట్-లెర్న్ అనేక మార్గాలను అందిస్తుంది. వీటిని విస్తృతంగా మూడు వర్గాలుగా విభజించవచ్చు:
1. ఫిల్టర్ పద్ధతులు
ఫిల్టర్ పద్ధతులు ఫీచర్ల యొక్క అంతర్గత లక్షణాల ఆధారంగా వాటి ఔచిత్యాన్ని అంచనా వేస్తాయి, ఏ నిర్దిష్ట మెషిన్ లెర్నింగ్ మోడల్తో సంబంధం లేకుండా. అవి సాధారణంగా వేగంగా మరియు గణనపరంగా చవకైనవి, ప్రారంభ డేటా అన్వేషణకు లేదా చాలా పెద్ద డేటాసెట్లతో వ్యవహరించేటప్పుడు వాటిని ఆదర్శవంతంగా చేస్తాయి. సాధారణ కొలమానాల్లో సహసంబంధం, పరస్పర సమాచారం మరియు గణాంక పరీక్షలు ఉన్నాయి.
a) సహసంబంధం ఆధారిత ఫీచర్ ఎంపిక
టార్గెట్ వేరియబుల్తో అధికంగా సహసంబంధం ఉన్న ఫీచర్లు ముఖ్యమైనవిగా పరిగణించబడతాయి. దీనికి విరుద్ధంగా, ఒకదానికొకటి అధికంగా సహసంబంధం ఉన్న ఫీచర్లు (మల్టీకోలినీయారిటీ) పునరావృతమయ్యే అవకాశం ఉంది మరియు తొలగింపు కోసం పరిగణించబడతాయి. సైకిట్-లెర్న్ యొక్క feature_selection మాడ్యూల్ దీనికి సహాయపడటానికి సాధనాలను అందిస్తుంది.
ఉదాహరణ: వేరియెన్స్ థ్రెషోల్డ్
చాలా తక్కువ వైవిధ్యాన్ని కలిగి ఉన్న ఫీచర్లు ఎక్కువ వివక్షత శక్తిని అందించకపోవచ్చు. VarianceThreshold క్లాస్, ఒక నిర్దిష్ట థ్రెషోల్డ్ను చేరుకోని వైవిధ్యాన్ని కలిగి ఉన్న ఫీచర్లను తొలగిస్తుంది. ఇది సంఖ్యా ఫీచర్లకు ప్రత్యేకంగా ఉపయోగపడుతుంది.
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]])
ఈ ఉదాహరణలో, మొదటి ఫీచర్ (అన్నీ సున్నాలు) సున్నా వైవిధ్యాన్ని కలిగి ఉంది మరియు తొలగించబడుతుంది. ఇది స్థిరమైన లేదా దాదాపు స్థిరమైన ఫీచర్లను విస్మరించడానికి ప్రాథమిక కానీ సమర్థవంతమైన మార్గం, అవి ఎలాంటి అంచనా శక్తిని అందించవు.
ఉదాహరణ: టార్గెట్తో సహసంబంధం (పాండాలు మరియు సైపై ఉపయోగించి)
అన్ని ఫీచర్ రకాలలో టార్గెట్తో సహసంబంధం కోసం సైకిట్-లెర్న్కు ప్రత్యక్ష ఉన్నత-స్థాయి ఫంక్షన్ లేనప్పటికీ, ఇది ఒక సాధారణ ప్రీప్రాసెసింగ్ దశ. దీని కోసం మేము పాండాలు మరియు సైపైని ఉపయోగించవచ్చు.
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}")
ఈ స్నిప్పెట్ టార్గెట్ వేరియబుల్తో సరళ సంబంధాన్ని కలిగి ఉన్న ఫీచర్లను ఎలా గుర్తించాలో వివరిస్తుంది. బైనరీ టార్గెట్ల కోసం, పాయింట్-బైసీరియల్ సహసంబంధం సంబంధితమైనది, మరియు కేటగారికల్ టార్గెట్ల కోసం, ఇతర గణాంక పరీక్షలు మరింత సముచితమైనవి.
b) గణాంక పరీక్షలు
ఫీచర్లు మరియు టార్గెట్ వేరియబుల్ మధ్య ఆధారపడటాన్ని కొలవడానికి ఫిల్టర్ పద్ధతులు గణాంక పరీక్షలను కూడా ఉపయోగించవచ్చు. కేటగారికల్ ఫీచర్లతో వ్యవహరించేటప్పుడు లేదా డేటా పంపిణీ గురించి నిర్దిష్ట అంచనాలు వేయగలిగినప్పుడు ఇవి ప్రత్యేకంగా ఉపయోగపడతాయి.
సైకిట్-లెర్న్ యొక్క feature_selection మాడ్యూల్ అందిస్తుంది:
f_classif: వర్గీకరణ పనుల కోసం లేబుల్/ఫీచర్ మధ్య ANOVA F-విలువ. ఫీచర్లు సంఖ్యాపరమైనవిగా మరియు టార్గెట్ వర్గీకరణపరమైనదిగా భావిస్తుంది.f_regression: రిగ్రెషన్ పనుల కోసం లేబుల్/ఫీచర్ మధ్య F-విలువ. ఫీచర్లు సంఖ్యాపరమైనవిగా మరియు టార్గెట్ సంఖ్యాపరమైనదిగా భావిస్తుంది.mutual_info_classif: వివిక్త టార్గెట్ వేరియబుల్ కోసం పరస్పర సమాచారం. నాన్-లీనియర్ సంబంధాలను నిర్వహించగలదు.mutual_info_regression: నిరంతర టార్గెట్ వేరియబుల్ కోసం పరస్పర సమాచారం.chi2: వర్గీకరణ పనుల కోసం నాన్-నెగటివ్ ఫీచర్ల చి-స్క్వేర్డ్ గణాంకాలు. కేటగారికల్ ఫీచర్ల కోసం ఉపయోగించబడుతుంది.
ఉదాహరణ: f_classif మరియు SelectKBest ఉపయోగించడం
SelectKBest అనేది ఒక మెటా-ట్రాన్స్ఫార్మర్, ఇది ఎంచుకున్న స్కోరింగ్ ఫంక్షన్ (f_classif వంటిది) ఆధారంగా ఫీచర్లను ఎంచుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది.
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]}")
ఈ ఉదాహరణ వర్గీకరణ కోసం వాటి గణాంక ప్రాముఖ్యత ఆధారంగా 'k' ఉత్తమ ఫీచర్లను ఎలా ఎంచుకోవాలో చూపిస్తుంది. f_classifలోని F-విలువ ప్రాథమికంగా సమూహాల (క్లాసులు) మధ్య వైవిధ్యాన్ని సమూహాలలోని వైవిధ్యంతో పోల్చి కొలుస్తుంది. అధిక F-విలువ ఫీచర్ మరియు టార్గెట్ మధ్య బలమైన సంబంధాన్ని సూచిస్తుంది.
గ్లోబల్ పరిశీలన: వివిధ ప్రాంతాల నుండి డేటాసెట్లతో (ఉదా., విభిన్న వాతావరణాల నుండి సెన్సార్ డేటా, విభిన్న ఆర్థిక వ్యవస్థల నుండి ఆర్థిక డేటా) పని చేస్తున్నప్పుడు, ఫీచర్ల యొక్క గణాంక లక్షణాలు గణనీయంగా మారవచ్చు. ఈ గణాంక పరీక్షల యొక్క అంచనాలను (ఉదా., ANOVA కోసం సాధారణత) అర్థం చేసుకోవడం చాలా కీలకం, మరియు పరస్పర సమాచారం వంటి నాన్-పారామెట్రిక్ పరీక్షలు విభిన్న దృశ్యాలలో మరింత పటిష్టంగా ఉండవచ్చు.
2. వ్రాపర్ పద్ధతులు
వ్రాతపద్ధతులు ఫీచర్ సబ్సెట్ల నాణ్యతను అంచనా వేయడానికి నిర్దిష్ట మెషిన్ లెర్నింగ్ మోడల్ను ఉపయోగిస్తాయి. అవి మోడల్ శిక్షణ ప్రక్రియను శోధన వ్యూహంలో 'చుట్టి' ఫీచర్ల యొక్క సరైన సమితిని కనుగొంటాయి. ఫిల్టర్ పద్ధతుల కంటే సాధారణంగా మరింత ఖచ్చితమైనవి అయినప్పటికీ, పునరావృత మోడల్ శిక్షణ కారణంగా అవి గణనపరంగా చాలా ఖరీదైనవి.
a) రికర్సివ్ ఫీచర్ ఎలిమినేషన్ (RFE)
RFE పునరావృతంగా ఫీచర్లను తొలగించడం ద్వారా పనిచేస్తుంది. ఇది మొత్తం ఫీచర్ సమితిపై మోడల్ను శిక్షణ ఇవ్వడం ద్వారా ప్రారంభమవుతుంది, ఆపై మోడల్ యొక్క గుణకాలు లేదా ఫీచర్ ప్రాముఖ్యతల ఆధారంగా తక్కువ ముఖ్యమైన ఫీచర్లను తొలగిస్తుంది. కావలసిన సంఖ్యలో ఫీచర్లు చేరే వరకు ఈ ప్రక్రియ పునరావృతం చేయబడుతుంది.
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 శక్తివంతమైనది ఎందుకంటే అది ఎంచుకున్న మోడల్ ద్వారా అంచనా వేయబడిన ఫీచర్ల మధ్య పరస్పర చర్యలను పరిగణిస్తుంది. step పరామితి ప్రతి పునరావృత్తిలో ఎన్ని ఫీచర్లు తొలగించబడతాయో నియంత్రిస్తుంది.
b) సీక్వెన్షియల్ ఫీచర్ ఎంపిక (SFS)
సైకిట్-లెర్న్ యొక్క ప్రధాన feature_selection లో ప్రత్యక్ష తరగతి కానప్పటికీ, సీక్వెన్షియల్ ఫీచర్ ఎంపిక అనేది తరచుగా సైకిట్-లెర్న్ ఎస్టిమేటర్లను ఉపయోగించి అమలు చేయబడే ఒక సంభావిత విధానం. ఇది ఫార్వర్డ్ ఎంపిక (ఖాళీ సెట్తో ప్రారంభించి ఒక్కొక్కటిగా ఫీచర్లను జోడించడం) లేదా బ్యాక్వర్డ్ ఎలిమినేషన్ (అన్ని ఫీచర్లతో ప్రారంభించి ఒక్కొక్కటిగా వాటిని తొలగించడం) రెండింటినీ కలిగి ఉంటుంది. sklearn.feature_selectionలోని సైకిట్-లెర్న్ యొక్క SequentialFeatureSelector దీనిని అమలు చేస్తుంది.
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}")
cv పరామితిలో SequentialFeatureSelector క్రాస్-వాలిడేషన్ను సూచిస్తుంది, ఇది ఫీచర్ ఎంపికను మరింత పటిష్టంగా మరియు శిక్షణ డేటాకు ఓవర్ఫిట్టింగ్కు తక్కువ గురికాకుండా చేయడానికి సహాయపడుతుంది. డేటా నాణ్యత మరియు పంపిణీ విపరీతంగా మారవచ్చు కాబట్టి, ఈ పద్ధతులను ప్రపంచవ్యాప్తంగా వర్తింపజేసేటప్పుడు ఇది ఒక కీలకమైన అంశం.
3. ఎంబెడెడ్ పద్ధతులు
ఎంబెడెడ్ పద్ధతులు మోడల్ శిక్షణ ప్రక్రియలో భాగంగా ఫీచర్ ఎంపికను నిర్వహిస్తాయి. అవి వ్రాపర్ పద్ధతుల కంటే గణనపరంగా తక్కువ ఖర్చుతో కూడుకున్నవి అనే ప్రయోజనాన్ని కలిగి ఉంటాయి, అయితే ఇప్పటికీ ఫీచర్ పరస్పర చర్యలను పరిగణిస్తాయి. చాలా క్రమబద్ధీకరించబడిన మోడల్లు ఈ వర్గంలోకి వస్తాయి.
a) L1 రెగ్యులరైజేషన్ (లాస్సో)
లీనియర్ మోడల్లలోని Lasso (లీస్ట్ అబ్సల్యూట్ ష్రింకేజ్ అండ్ సెలెక్షన్ ఆపరేటర్) వంటి మోడల్లు L1 రెగ్యులరైజేషన్ను ఉపయోగిస్తాయి. ఈ సాంకేతికత గుణకాల యొక్క సంపూర్ణ విలువకు జరిమానాను జోడిస్తుంది, ఇది కొన్ని గుణకాలను ఖచ్చితంగా సున్నాకి నడిపిస్తుంది. సున్నా గుణకాలు ఉన్న ఫీచర్లు సమర్థవంతంగా తొలగించబడతాయి.
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ను క్రాస్-వాలిడేషన్ ద్వారా సరైన ఆల్ఫా విలువను స్వయంచాలకంగా కనుగొనడానికి ఉపయోగించవచ్చు.
b) ట్రీ-ఆధారిత ఫీచర్ ప్రాముఖ్యతలు
RandomForestClassifier, GradientBoostingClassifier, మరియు ExtraTreesClassifier వంటి సమిష్టి పద్ధతులు అంతర్గతంగా ఫీచర్ ప్రాముఖ్యతలను అందిస్తాయి. ఇవి సమిష్టిలోని చెట్లలో ప్రతి ఫీచర్ ఎంత వరకు అపవిత్రత లేదా లోపాన్ని తగ్గించడానికి దోహదపడుతుందో దాని ఆధారంగా లెక్కించబడతాయి. తక్కువ ప్రాముఖ్యత కలిగిన ఫీచర్లను తొలగించవచ్చు.
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}")
ట్రీ-ఆధారిత పద్ధతులు శక్తివంతమైనవి ఎందుకంటే అవి నాన్-లీనియర్ సంబంధాలను మరియు ఫీచర్ పరస్పర చర్యలను సంగ్రహించగలవు. అవి వైద్య నిర్ధారణల నుండి (ఉదాహరణలో వలె) వివిధ మార్కెట్లలో ఆర్థిక మోసం గుర్తింపు వరకు వివిధ డొమైన్లలో విస్తృతంగా వర్తిస్తాయి.
డైమెన్షనాలిటీ తగ్గింపు కోసం ఫీచర్ ఎక్స్ట్రాక్షన్
ఫీచర్ ఎంపిక అసలు ఫీచర్లను ఉంచుతుంది, అయితే ఫీచర్ ఎక్స్ట్రాక్షన్ కొత్త, తగ్గించబడిన ఫీచర్ల సమితిని సృష్టిస్తుంది. అసలు ఫీచర్లు అధికంగా సహసంబంధం కలిగి ఉన్నప్పుడు లేదా మీరు డేటాను చాలా వైవిధ్యాన్ని సంగ్రహించే తక్కువ-డైమెన్షనల్ స్పేస్లోకి ప్రొజెక్ట్ చేయాలనుకున్నప్పుడు ఇది ప్రత్యేకంగా ఉపయోగపడుతుంది.
1. ప్రిన్సిపల్ కాంపోనెంట్ ఎనాలసిస్ (PCA)
PCA అనేది ఒక లీనియర్ ట్రాన్స్ఫర్మేషన్ టెక్నిక్, ఇది డేటాలో గరిష్ట వైవిధ్యాన్ని సంగ్రహించే ఆర్థోగోనల్ యాక్సిస్ (ప్రిన్సిపల్ కాంపోనెంట్లు) సమితిని కనుగొనడం లక్ష్యంగా పెట్టుకుంటుంది. మొదటి ప్రిన్సిపల్ కాంపోనెంట్ అత్యధిక వైవిధ్యాన్ని సంగ్రహిస్తుంది, రెండవది తదుపరి అధిక వైవిధ్యాన్ని (మొదటిదానికి ఆర్థోగోనల్గా) సంగ్రహిస్తుంది, మొదలైనవి. మొదటి 'k' ప్రిన్సిపల్ కాంపోనెంట్లను మాత్రమే ఉంచడం ద్వారా, మనం డైమెన్షనాలిటీ తగ్గింపును సాధిస్తాము.
ముఖ్య గమనిక: PCA ఫీచర్ల స్థాయికి సున్నితమైనది. PCAను వర్తింపజేయడానికి ముందు మీ డేటాను స్కేల్ చేయడం (ఉదా., StandardScaler ఉపయోగించి) చాలా కీలకం.
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 అనేది అధిక-డైమెన్షనల్ డేటాను 2 లేదా 3 డైమెన్షన్లకు తగ్గించడం ద్వారా దృశ్యమానం చేయడానికి అద్భుతమైనది. ఇది అన్వేషణాత్మక డేటా విశ్లేషణలో ఒక ప్రాథమిక పద్ధతి మరియు తదుపరి మోడలింగ్ దశలను గణనీయంగా వేగవంతం చేస్తుంది. దాని సమర్థత ఇమేజ్ ప్రాసెసింగ్ మరియు జెనెటిక్స్ వంటి డొమైన్లలో గమనించబడుతుంది.
2. లీనియర్ డిస్క్రిమినెంట్ ఎనాలసిస్ (LDA)
PCA వలె కాకుండా, ఇది పర్యవేక్షించబడనిది మరియు వైవిధ్యాన్ని పెంచడం లక్ష్యంగా పెట్టుకుంటుంది, LDA అనేది తరగతుల మధ్య విభజనను పెంచే తక్కువ-డైమెన్షనల్ ప్రాతినిధ్యాన్ని కనుగొనడం లక్ష్యంగా పెట్టుకున్న ఒక పర్యవేక్షిత పద్ధతి. ఇది ప్రధానంగా వర్గీకరణ పనుల కోసం ఉపయోగించబడుతుంది.
ముఖ్య గమనిక: LDAకు ఫీచర్లను స్కేల్ చేయడం కూడా అవసరం. అంతేకాకుండా, LDAలోని భాగాల సంఖ్య గరిష్టంగా n_classes - 1కి పరిమితం చేయబడింది.
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 ప్రత్యేకంగా ఉపయోగపడుతుంది, ఇది కస్టమర్ విభజన లేదా వ్యాధి వర్గీకరణ వంటి అనేక ప్రపంచ అనువర్తనాల్లో ఒక సాధారణ సవాలు.
3. t-డిస్ట్రిబ్యూటెడ్ స్టోకాస్టిక్ నైబర్ ఎంబెడింగ్ (t-SNE)
t-SNE అనేది ప్రధానంగా అధిక-డైమెన్షనల్ డేటాసెట్లను దృశ్యమానం చేయడానికి ఉపయోగించే ఒక నాన్-లీనియర్ డైమెన్షనాలిటీ తగ్గింపు పద్ధతి. ఇది అధిక-డైమెన్షనల్ డేటా పాయింట్లను తక్కువ-డైమెన్షనల్ స్పేస్కు (సాధారణంగా 2D లేదా 3D) మ్యాప్ చేయడం ద్వారా పనిచేస్తుంది, తద్వారా సారూప్య పాయింట్లు తక్కువ-డైమెన్షనల్ స్పేస్లో సారూప్య దూరాల ద్వారా నమూనా చేయబడతాయి. ఇది డేటాలో స్థానిక నిర్మాణం మరియు క్లస్టర్లను బహిర్గతం చేయడంలో రాణిస్తుంది.
ముఖ్య గమనిక: t-SNE గణనపరంగా ఖరీదైనది మరియు సాధారణంగా మోడల్ శిక్షణ కోసం ప్రీప్రాసెసింగ్ దశగా కాకుండా దృశ్యమానం కోసం ఉపయోగించబడుతుంది. ఫలితాలు విభిన్న యాదృచ్ఛిక ప్రారంభాలు మరియు పరామితి సెట్టింగ్లతో కూడా మారవచ్చు.
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 జెనోమిక్స్ లేదా సోషల్ నెట్వర్క్ విశ్లేషణ వంటి రంగాలలో ఎదురయ్యే సంక్లిష్ట, అధిక-డైమెన్షనల్ డేటా యొక్క అంతర్గత నిర్మాణాన్ని అర్థం చేసుకోవడానికి అమూల్యమైనది, ఇది లేకపోతే దాగి ఉండే నమూనాలలో దృశ్యమాన అంతర్దృష్టులను అందిస్తుంది.
గ్లోబల్ డేటాసెట్ల కోసం సరైన పద్ధతిని ఎంచుకోవడం
సముచితమైన ఫీచర్ ఎంపిక లేదా ఎక్స్ట్రాక్షన్ పద్ధతిని ఎంచుకోవడం అనేది అందరికీ సరిపోయే నిర్ణయం కాదు. గ్లోబల్ డేటాసెట్లకు ప్రత్యేకంగా కీలకమైన అనేక అంశాలు ఈ ఎంపికను ప్రభావితం చేస్తాయి:
- డేటా స్వభావం: మీ డేటా సంఖ్యాపరమైనదా, వర్గీకరణపరమైనదా, లేదా మిశ్రమమైనదా? తెలిసిన పంపిణీలు ఉన్నాయా? ఉదాహరణకు,
chi2నాన్-నెగటివ్ వర్గీకరణ ఫీచర్లకు అనుకూలంగా ఉంటుంది, అయితేf_classifసంఖ్యా ఫీచర్లకు మరియు వర్గీకరణ టార్గెట్కు ఉపయోగపడుతుంది. - మోడల్ రకం: లీనియర్ మోడల్లు L1 రెగ్యులరైజేషన్ నుండి ప్రయోజనం పొందవచ్చు, అయితే ట్రీ-ఆధారిత మోడల్లు సహజంగా ప్రాముఖ్యతలను అందిస్తాయి.
- గణన వనరులు: ఫిల్టర్ పద్ధతులు వేగవంతమైనవి, తరువాత ఎంబెడెడ్ పద్ధతులు, ఆపై వ్రాపర్ పద్ధతులు మరియు t-SNE.
- అర్థం చేసుకునే సామర్థ్యం అవసరాలు: ఒక అంచనా *ఎందుకు* చేయబడింది అని వివరించడం అత్యంత ముఖ్యమైనది అయితే, అసలు ఫీచర్లను నిలుపుకునే ఫీచర్ ఎంపిక పద్ధతులు (RFE లేదా L1 వంటివి) తరచుగా నైరూప్య భాగాలను సృష్టించే ఫీచర్ ఎక్స్ట్రాక్షన్ పద్ధతుల (PCA వంటివి) కంటే ప్రాధాన్యతనిస్తాయి.
- లీనియారిటీ వర్సెస్ నాన్-లీనియారిటీ: PCA మరియు లీనియర్ మోడల్లు సరళ సంబంధాలను ఊహిస్తాయి, అయితే t-SNE మరియు ట్రీ-ఆధారిత పద్ధతులు నాన్-లీనియర్ నమూనాలను సంగ్రహించగలవు.
- పర్యవేక్షించబడినది వర్సెస్ పర్యవేక్షించబడనిది: LDA పర్యవేక్షించబడినది (టార్గెట్ వేరియబుల్ను ఉపయోగిస్తుంది), అయితే PCA పర్యవేక్షించబడనిది.
- స్థాయి మరియు యూనిట్లు: PCA మరియు LDA కోసం, ఫీచర్ స్కేలింగ్ అవసరం. వివిధ గ్లోబల్ ప్రాంతాల నుండి సేకరించిన డేటాలో స్థాయి వ్యత్యాసాలను పరిగణించండి. ఉదాహరణకు, కరెన్సీ విలువలు లేదా సెన్సార్ రీడింగ్లు దేశాలు లేదా సెన్సార్ రకాలలో విపరీతంగా విభిన్న స్థాయిలను కలిగి ఉండవచ్చు.
- సాంస్కృతిక మరియు ప్రాంతీయ సూక్ష్మతలు: మానవ ప్రవర్తన, జనాభా వివరాలు లేదా వివిధ సాంస్కృతిక సందర్భాల నుండి సెంటిమెంట్ను కలిగి ఉన్న డేటాసెట్లతో పని చేస్తున్నప్పుడు, ఫీచర్ల వివరణ సంక్లిష్టంగా ఉంటుంది. ఒక ప్రాంతంలో అత్యంత అంచనా వేయగల ఫీచర్, విభిన్న సామాజిక నిబంధనలు, ఆర్థిక పరిస్థితులు లేదా డేటా సేకరణ పద్ధతుల కారణంగా మరొక ప్రాంతంలో అసంబద్ధమైనది లేదా తప్పుదోవ పట్టించేది కావచ్చు. విభిన్న జనాభాలో ఫీచర్ ప్రాముఖ్యతను అంచనా వేసేటప్పుడు ఎల్లప్పుడూ డొమైన్ నైపుణ్యాన్ని పరిగణించండి.
ఆచరణాత్మక అంతర్దృష్టులు:
- సరళంగా ప్రారంభించండి: శీఘ్ర అంచనా కోసం మరియు స్పష్టమైన శబ్దాన్ని తొలగించడానికి ఫిల్టర్ పద్ధతులతో (ఉదా., వేరియెన్స్ థ్రెషోల్డ్, గణాంక పరీక్షలు) ప్రారంభించండి.
- పునరావృతం చేసి అంచనా వేయండి: విభిన్న పద్ధతులతో ప్రయోగం చేయండి మరియు తగిన కొలమానాలు మరియు క్రాస్-వాలిడేషన్ను ఉపయోగించి మీ మోడల్ పనితీరుపై వాటి ప్రభావాన్ని అంచనా వేయండి.
- దృశ్యమానం చేయండి: మీ డేటాను తక్కువ డైమెన్షన్లలో దృశ్యమానం చేయడానికి PCA లేదా t-SNE వంటి పద్ధతులను ఉపయోగించండి, ఇది అంతర్లీన నిర్మాణాలను వెల్లడిస్తుంది మరియు మీ ఫీచర్ ఎంపిక వ్యూహాన్ని తెలియజేస్తుంది.
- డొమైన్ నైపుణ్యం కీలకం: ప్రత్యేకించి సంక్లిష్ట గ్లోబల్ డేటాతో వ్యవహరించేటప్పుడు, ఫీచర్ల అర్థం మరియు ఔచిత్యాన్ని అర్థం చేసుకోవడానికి డొమైన్ నిపుణులతో సహకరించండి.
- సమిష్టి విధానాలను పరిగణించండి: బహుళ ఫీచర్ ఎంపిక పద్ధతులను కలపడం కొన్నిసార్లు ఒకే పద్ధతిపై ఆధారపడటం కంటే మెరుగైన ఫలితాలను ఇవ్వగలదు.
సమగ్ర వర్క్ఫ్లో కోసం సైకిట్-లెర్న్ యొక్క పైప్లైన్
సైకిట్-లెర్న్ యొక్క Pipeline ఆబ్జెక్ట్ ఫీచర్ ఎంపిక/ఎక్స్ట్రాక్షన్ సహా ప్రీప్రాసెసింగ్ దశలను మోడల్ శిక్షణతో అనుసంధానించడానికి చాలా ఉపయోగకరంగా ఉంటుంది. ఇది క్రాస్-వాలిడేషన్ యొక్క ప్రతి మడతలో మీ ఫీచర్ ఎంపిక స్థిరంగా నిర్వహించబడుతుందని నిర్ధారిస్తుంది, డేటా లీకేజ్ను నిరోధించి మరింత నమ్మదగిన ఫలితాలను ఉత్పత్తి చేస్తుంది. విభిన్న ప్రపంచ మార్కెట్లలో అమలు చేయబడే మోడల్లను నిర్మించేటప్పుడు ఇది ప్రత్యేకంగా కీలకమైనది.
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}")
పైప్లైన్లను ఉపయోగించడం ద్వారా మొత్తం ప్రక్రియ—స్కేలింగ్ నుండి ఫీచర్ ఎంపిక వరకు వర్గీకరణ వరకు—ఒక సింగిల్ ఎంటిటీగా పరిగణించబడుతుందని నిర్ధారిస్తుంది. ఇది పటిష్టమైన మోడల్ అభివృద్ధికి ఒక ఉత్తమ పద్ధతి, ప్రత్యేకించి విభిన్న డేటా పంపిణీలలో స్థిరమైన పనితీరు కీలకం అయిన ప్రపంచ విస్తరణ కోసం మోడల్లు ఉద్దేశించినప్పుడు.
ముగింపు
ఫీచర్ ఎంపిక మరియు ఎక్స్ట్రాక్షన్ ద్వారా డైమెన్షనాలిటీ తగ్గింపు సమర్థవంతమైన, పటిష్టమైన మరియు అర్థం చేసుకోగలిగే మెషిన్ లెర్నింగ్ మోడల్లను నిర్మించడంలో కీలకమైన దశ. సైకిట్-లెర్న్ ఈ సవాళ్లను ఎదుర్కోవడానికి సమగ్ర టూల్కిట్ను అందిస్తుంది, ప్రపంచవ్యాప్తంగా ఉన్న డేటా సైంటిస్టులను శక్తివంతం చేస్తుంది. విభిన్న పద్ధతులను—ఫిల్టర్, వ్రాపర్, ఎంబెడెడ్ పద్ధతులు మరియు PCA మరియు LDA వంటి ఫీచర్ ఎక్స్ట్రాక్షన్ టెక్నిక్లు—అర్థం చేసుకోవడం ద్వారా, మీరు మీ నిర్దిష్ట డేటాసెట్ మరియు లక్ష్యాలకు అనుగుణంగా సమాచారంతో కూడిన నిర్ణయాలు తీసుకోవచ్చు.
మా గ్లోబల్ ప్రేక్షకులకు, పరిశీలనలు కేవలం అల్గోరిథమిక్ ఎంపికలకు మించి విస్తరించి ఉన్నాయి. డేటా ప్రామాణికత, వివిధ ప్రాంతాలలో ఫీచర్ సేకరణ ద్వారా ప్రవేశపెట్టబడిన సంభావ్య పక్షపాతాలు మరియు స్థానిక వాటాదారుల నిర్దిష్ట అర్థం చేసుకునే సామర్థ్యం అవసరాలు చాలా కీలకమైనవి. సైకిట్-లెర్న్ యొక్క Pipeline వంటి సాధనాలను ఉపయోగించడం ద్వారా ఒక నిర్మాణాత్మక మరియు పునరుత్పత్తి చేయగల వర్క్ఫ్లోను నిర్ధారిస్తుంది, ఇది విభిన్న అంతర్జాతీయ సందర్భాలలో నమ్మదగిన AI పరిష్కారాలను అమలు చేయడానికి అవసరం.
ఆధునిక డేటా సైన్స్ యొక్క సంక్లిష్టతలను మీరు నావిగేట్ చేస్తున్నప్పుడు, సైకిట్-లెర్న్ యొక్క ఫీచర్ ఎంపిక సామర్థ్యాలలో ప్రావీణ్యం సంపాదించడం నిస్సందేహంగా ఒక ముఖ్యమైన ఆస్తి అవుతుంది, మీ డేటా ఎక్కడ నుండి వచ్చినప్పటికీ, దాని పూర్తి సామర్థ్యాన్ని అన్లాక్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.