பரிமாணக் குறைப்பிற்கான Scikit-learn-இன் கூறு தேர்வு நுட்பங்கள் குறித்த ஒரு விரிவான வழிகாட்டி, இது உலகளாவிய தரவு அறிவியல் பயிற்சியாளர்களை மிகவும் திறமையான மற்றும் வலுவான மாதிரிகளை உருவாக்க உதவுகிறது.
Scikit-learn கூறுத் தேர்வு: உலகளாவிய தரவுத்தொகுப்புகளுக்கான பரிமாணக் குறைப்பில் தேர்ச்சி
தொடர்ந்து விரிவடைந்து வரும் தரவு உலகில், கூறுகளின் அளவு மிகவும் அதிநவீன இயந்திர கற்றல் மாதிரிகளைக் கூட திணறடிக்கச் செய்யும். "பரிமாணத்தின் சாபம்" என்று அடிக்கடி குறிப்பிடப்படும் இந்த நிகழ்வு, கணினிச் செலவுகள் அதிகரித்தல், மாதிரி துல்லியம் குறைதல் மற்றும் விளக்கமளிக்கும் திறன் குறைதல் ஆகியவற்றிற்கு வழிவகுக்கும். அதிர்ஷ்டவசமாக, கூறு தேர்வு மற்றும் பரிமாணக் குறைப்பு நுட்பங்கள் சக்திவாய்ந்த தீர்வுகளை வழங்குகின்றன. பைத்தானின் இயந்திர கற்றல் சூழலின் ஒரு மூலக்கல்லான Scikit-learn, இந்த சவால்களை திறம்பட சமாளிக்க ஒரு சிறந்த கருவிகளின் தொகுப்பை வழங்குகிறது, இது உலகெங்கிலும் உள்ள தரவு விஞ்ஞானிகளுக்கு ஒரு இன்றியமையாத வளமாக அமைகிறது.
இந்த விரிவான வழிகாட்டி, பரிமாணக் குறைப்பில் கவனம் செலுத்தி, Scikit-learn-இன் கூறு தேர்வு திறன்களின் நுணுக்கங்களை ஆராயும். நாங்கள் பல்வேறு வழிமுறைகள், அவற்றின் அடிப்படைக் கொள்கைகள், குறியீடு எடுத்துக்காட்டுகளுடன் கூடிய நடைமுறைச் செயல்பாடுகள் மற்றும் பல்வேறு உலகளாவிய தரவுத்தொகுப்புகளுக்கான பரிசீலனைகளை ஆராய்வோம். எங்கள் உலகளாவிய பார்வையாளர்களாகிய, ஆர்வமுள்ள மற்றும் அனுபவம் வாய்ந்த தரவு பயிற்சியாளர்களான உங்களுக்கு, கூறு தேர்வு பற்றிய தகவலறிந்த முடிவுகளை எடுப்பதற்கான அறிவை வழங்குவதே எங்கள் நோக்கம், இது மிகவும் திறமையான, துல்லியமான மற்றும் விளக்கக்கூடிய இயந்திர கற்றல் மாதிரிகளுக்கு வழிவகுக்கும்.
பரிமாணக் குறைப்பைப் புரிந்துகொள்ளுதல்
Scikit-learn-இன் குறிப்பிட்ட கருவிகளை ஆராய்வதற்கு முன், பரிமாணக் குறைப்பின் அடிப்படைக் கருத்துக்களைப் புரிந்துகொள்வது அவசியம். இந்த செயல்முறை, முடிந்தவரை முக்கியமான தகவல்களைப் பாதுகாத்துக்கொண்டு, உயர்-பரிமாண வெளியிலிருந்து குறைந்த-பரிமாண வெளிக்கு தரவை மாற்றுவதை உள்ளடக்கியது. இதன் நன்மைகள் பல:
- குறைக்கப்பட்ட ஓவர்ஃபிட்டிங் (Overfitting): குறைவான கூறுகள் ஒரு எளிய மாதிரியைக் குறிக்கின்றன, இது பயிற்சித் தரவுகளில் உள்ள தேவையற்ற இரைச்சலைக் கற்றுக்கொள்வதற்கான வாய்ப்பு குறைவு.
- வேகமான பயிற்சி நேரங்கள்: குறைவான கூறுகளைக் கொண்ட மாதிரிகள் கணிசமாக விரைவாகப் பயிற்சி பெறுகின்றன.
- மேம்படுத்தப்பட்ட மாதிரி விளக்கம்: குறைவான கூறுகளுக்கு இடையிலான உறவுகளைப் புரிந்துகொள்வது எளிது.
- குறைந்த சேமிப்பு இடம்: குறைந்த பரிமாணம் குறைந்த நினைவகத்தையே richiede.
- இரைச்சல் குறைப்பு: பொருத்தமற்ற அல்லது தேவையற்ற கூறுகளை நீக்கலாம், இது தூய்மையான தரவுகளுக்கு வழிவகுக்கிறது.
பரிமாணக் குறைப்பை இரண்டு முக்கிய அணுகுமுறைகளாக வகைப்படுத்தலாம்:
1. கூறு தேர்வு (Feature Selection)
இந்த அணுகுமுறை, கொடுக்கப்பட்ட சிக்கலுக்கு மிகவும் பொருத்தமான அசல் கூறுகளின் ஒரு துணைக்குழுவைத் தேர்ந்தெடுப்பதை உள்ளடக்கியது. அசல் கூறுகள் தக்கவைக்கப்படுகின்றன, ஆனால் அவற்றின் எண்ணிக்கை குறைக்கப்படுகிறது. இதை ஒரு சமையல் குறிப்புக்கு மிகவும் தாக்கத்தை ஏற்படுத்தும் பொருட்களைக் கண்டறிந்து மீதமுள்ளவற்றை நிராகரிப்பது போல நினைத்துப் பாருங்கள்.
2. கூறு பிரித்தெடுத்தல் (Feature Extraction)
இந்த அணுகுமுறை அசல் கூறுகளை ஒரு புதிய, சிறிய கூறுகளின் தொகுப்பாக மாற்றுகிறது. இந்த புதிய கூறுகள் அசல் கூறுகளின் சேர்க்கைகள் அல்லது கணிப்புகளாகும், இது தரவில் உள்ள மிக முக்கியமான மாறுபாட்டையோ அல்லது தகவலையோ கைப்பற்றுவதை நோக்கமாகக் கொண்டுள்ளது. இது அசல் பொருட்களின் ஒரு வடிகட்டிய சாரத்தை உருவாக்குவதைப் போன்றது.
Scikit-learn இந்த இரண்டு அணுகுமுறைகளுக்கும் சக்திவாய்ந்த கருவிகளை வழங்குகிறது. நாங்கள் பரிமாணக் குறைப்புக்கு பங்களிக்கும் நுட்பங்களில் கவனம் செலுத்துவோம், பெரும்பாலும் கூறு தேர்வு அல்லது பிரித்தெடுத்தல் மூலம்.
Scikit-learn-இல் உள்ள கூறு தேர்வு முறைகள்
Scikit-learn கூறு தேர்வைச் செய்ய பல வழிகளை வழங்குகிறது. இவற்றை மூன்று வகைகளாகப் பிரிக்கலாம்:
1. வடிகட்டி முறைகள் (Filter Methods)
வடிகட்டி முறைகள், எந்தவொரு குறிப்பிட்ட இயந்திர கற்றல் மாதிரியையும் சாராமல், கூறுகளின் உள்ளார்ந்த பண்புகளின் அடிப்படையில் அவற்றின் பொருத்தத்தை மதிப்பிடுகின்றன. அவை பொதுவாக வேகமானவை மற்றும் கணினி ரீதியாக செலவு குறைந்தவை, இது ஆரம்ப தரவு ஆய்வுக்கு அல்லது மிகப் பெரிய தரவுத்தொகுப்புகளைக் கையாளும்போது அவற்றை சிறந்ததாக ஆக்குகிறது. பொதுவான அளவீடுகளில் தொடர்பு, பரஸ்பர தகவல் மற்றும் புள்ளிவிவர சோதனைகள் ஆகியவை அடங்கும்.
அ) தொடர்பு அடிப்படையிலான கூறு தேர்வு
இலக்கு மாறியுடன் அதிக தொடர்பு கொண்ட கூறுகள் முக்கியமானவையாகக் கருதப்படுகின்றன. மாறாக, ஒன்றுக்கொன்று அதிக தொடர்பு கொண்ட கூறுகள் (multicollinearity) தேவையற்றதாக இருக்கலாம் மற்றும் அகற்றுவதற்குப் பரிசீலிக்கப்படலாம். Scikit-learn-இன் feature_selection தொகுதி இதற்கு உதவ கருவிகளை வழங்குகிறது.
எடுத்துக்காட்டு: வேரியன்ஸ் த்ரெஷோல்ட் (Variance Threshold)
மிகக் குறைந்த மாறுபாடு (variance) கொண்ட கூறுகள் அதிக பாகுபடுத்தும் சக்தியை வழங்காது. 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]])
இந்த எடுத்துக்காட்டில், முதல் கூறு (அனைத்தும் பூஜ்ஜியங்கள்) பூஜ்ஜிய மாறுபாட்டைக் கொண்டுள்ளது மற்றும் அகற்றப்படுகிறது. இது எந்த கணிப்பு சக்தியையும் வழங்காத நிலையான அல்லது கிட்டத்தட்ட நிலையான கூறுகளை நிராகரிக்க ஒரு அடிப்படை ஆனால் பயனுள்ள வழியாகும்.
எடுத்துக்காட்டு: இலக்குடன் தொடர்பு (பாண்டாஸ் மற்றும் SciPy பயன்படுத்தி)
Scikit-learn-இல் அனைத்து கூறு வகைகளிலும் இலக்குடன் தொடர்பைக் கணக்கிட நேரடி உயர்-நிலை செயல்பாடு இல்லை என்றாலும், இது ஒரு பொதுவான முன்தயாரிப்பு படியாகும். இதற்காக நாம் பாண்டாஸ் (Pandas) மற்றும் SciPy-ஐப் பயன்படுத்தலாம்.
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}")
இந்தக் குறியீடு துணுக்கு, இலக்கு மாறியுடன் நேரியல் உறவைக் கொண்ட கூறுகளை எவ்வாறு கண்டறிவது என்பதைக் காட்டுகிறது. பைனரி இலக்குகளுக்கு, புள்ளி-பைசீரியல் தொடர்பு பொருத்தமானது, மற்றும் வகைப்படுத்தப்பட்ட இலக்குகளுக்கு, பிற புள்ளிவிவர சோதனைகள் மிகவும் பொருத்தமானவை.
ஆ) புள்ளிவிவர சோதனைகள்
வடிகட்டி முறைகள் கூறுகளுக்கும் இலக்கு மாறிக்கும் இடையிலான சார்புநிலையை அளவிட புள்ளிவிவர சோதனைகளையும் பயன்படுத்தலாம். வகைப்படுத்தப்பட்ட கூறுகளைக் கையாளும்போதோ அல்லது தரவு விநியோகம் குறித்த குறிப்பிட்ட அனுமானங்களைச் செய்ய முடியுமென்றாலோ இவை மிகவும் பயனுள்ளதாக இருக்கும்.
Scikit-learn-இன் feature_selection தொகுதி வழங்குகிறது:
f_classif: வகைப்படுத்தல் பணிகளுக்கான லேபிள்/கூறுக்கு இடையிலான ANOVA F-மதிப்பு. கூறுகள் எண் வகையிலும் இலக்கு வகைப்படுத்தப்பட்டதாகவும் இருக்கும் என்று அனுமானிக்கிறது.f_regression: பின்னடைவு பணிகளுக்கான லேபிள்/கூறுக்கு இடையிலான F-மதிப்பு. கூறுகள் மற்றும் இலக்கு இரண்டும் எண் வகையிலும் இருக்கும் என்று அனுமானிக்கிறது.mutual_info_classif: ஒரு தனித்துவமான இலக்கு மாறிக்கான பரஸ்பர தகவல். நேரியல் அல்லாத உறவுகளைக் கையாள முடியும்.mutual_info_regression: ஒரு தொடர்ச்சியான இலக்கு மாறிக்கான பரஸ்பர தகவல்.chi2: வகைப்படுத்தல் பணிகளுக்கான எதிர்மறையற்ற கூறுகளின் கை-வர்க்க (Chi-squared) புள்ளிவிவரங்கள். வகைப்படுத்தப்பட்ட கூறுகளுக்குப் பயன்படுத்தப்படுகிறது.
எடுத்துக்காட்டு: `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. ரேப்பர் முறைகள் (Wrapper Methods)
ரேப்பர் முறைகள், கூறு துணைக்குழுக்களின் தரத்தை மதிப்பிடுவதற்கு ஒரு குறிப்பிட்ட இயந்திர கற்றல் மாதிரியைப் பயன்படுத்துகின்றன. அவை சிறந்த கூறுகளின் தொகுப்பைக் கண்டறிய ஒரு தேடல் உத்திக்குள் ஒரு மாதிரி பயிற்சி செயல்முறையை 'சுற்றிக்' கொள்கின்றன. பொதுவாக வடிகட்டி முறைகளை விட துல்லியமாக இருந்தாலும், மீண்டும் மீண்டும் மாதிரிப் பயிற்சி செய்வதால் அவை கணினி ரீதியாக மிகவும் விலை உயர்ந்தவை.
அ) ரெக்கர்சிவ் கூறு நீக்கம் (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` அளவுரு ஒவ்வொரு சுழற்சியிலும் எத்தனை கூறுகள் நீக்கப்படுகின்றன என்பதைக் கட்டுப்படுத்துகிறது.
ஆ) தொடர் கூறு தேர்வு (SFS)
Scikit-learn-இன் மைய feature_selection-இல் இது ஒரு நேரடி வகுப்பாக இல்லை என்றாலும், தொடர் கூறு தேர்வு என்பது Scikit-learn மதிப்பீட்டாளர்களைப் பயன்படுத்தி அடிக்கடி செயல்படுத்தப்படும் ஒரு கருத்தியல் அணுகுமுறையாகும். இது முன்னோக்கிய தேர்வு (வெற்று தொகுப்புடன் தொடங்கி ஒவ்வொன்றாக கூறுகளைச் சேர்ப்பது) அல்லது பின்தங்கிய நீக்கம் (அனைத்து கூறுகளுடன் தொடங்கி ஒவ்வொன்றாக அவற்றை நீக்குவது) ஆகியவற்றை உள்ளடக்கியது. Scikit-learn-இன் 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}")
SequentialFeatureSelector-இல் உள்ள cv அளவுரு குறுக்கு-சரிபார்ப்பைக் குறிக்கிறது, இது கூறு தேர்வை மிகவும் வலுவானதாகவும், பயிற்சித் தரவுகளுக்கு ஓவர்ஃபிட்டிங் செய்வதற்கான வாய்ப்பைக் குறைக்கவும் உதவுகிறது. இந்த முறைகளை உலகளவில் பயன்படுத்தும்போது இது ஒரு முக்கியமான கருத்தாகும், ஏனெனில் தரவு தரம் மற்றும் விநியோகம் பெரிதும் மாறுபடலாம்.
3. உட்பொதிக்கப்பட்ட முறைகள் (Embedded Methods)
உட்பொதிக்கப்பட்ட முறைகள் மாதிரி பயிற்சி செயல்முறையின் ஒரு பகுதியாக கூறு தேர்வைச் செய்கின்றன. அவை கூறு தொடர்புகளைக் கருத்தில் கொள்ளும் அதே வேளையில், ரேப்பர் முறைகளை விட கணினி ரீதியாக செலவு குறைந்த நன்மை கொண்டவை. பல முறைப்படுத்தப்பட்ட (regularized) மாதிரிகள் இந்த வகைக்குள் அடங்கும்.
அ) L1 முறைப்படுத்தல் (லாஸ்ஸோ)
நேரியல் மாடல்களில் Lasso (Least Absolute Shrinkage and Selection Operator) போன்ற மாதிரிகள் 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 குறுக்கு-சரிபார்ப்பு மூலம் உகந்த ஆல்பா (alpha) மதிப்பைக் தானாகக் கண்டறிய பயன்படுத்தப்படலாம்.
ஆ) மரம் சார்ந்த கூறு முக்கியத்துவங்கள்
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-க்கு, கூறு அளவிடுதல் அவசியம். வெவ்வேறு உலகளாவிய பிராந்தியங்களிலிருந்து சேகரிக்கப்பட்ட தரவுகளில் உள்ள அளவுகோல் வேறுபாடுகளைக் கவனியுங்கள். உதாரணமாக, நாணய மதிப்புகள் அல்லது சென்சார் அளவீடுகள் நாடுகள் அல்லது சென்சார் வகைகளில் முற்றிலும் மாறுபட்ட அளவுகளைக் கொண்டிருக்கலாம்.
- கலாச்சார மற்றும் பிராந்திய நுணுக்கங்கள்: மனித நடத்தை, புள்ளிவிவரங்கள் அல்லது வெவ்வேறு கலாச்சார சூழல்களிலிருந்து வரும் உணர்வுகளை உள்ளடக்கிய தரவுத்தொகுப்புகளுடன் பணிபுரியும்போது, கூறுகளின் விளக்கம் சிக்கலானதாக இருக்கலாம். ஒரு பிராந்தியத்தில் மிகவும் கணிப்புத்திறன் கொண்ட ஒரு கூறு, மாறுபட்ட சமூக விதிமுறைகள், பொருளாதார நிலைமைகள் அல்லது தரவு சேகரிப்பு முறைகள் காரணமாக மற்றொரு பிராந்தியத்தில் பொருத்தமற்றதாகவோ அல்லது தவறாக வழிநடத்துவதாகவோ இருக்கலாம். பல்வேறு மக்களிடையே கூறு முக்கியத்துவத்தை மதிப்பிடும்போது எப்போதும் கள நிபுணத்துவத்தைக் கருத்தில் கொள்ளுங்கள்.
செயல்படுத்தக்கூடிய நுண்ணறிவுகள்:
- எளிமையாகத் தொடங்குங்கள்: விரைவான மதிப்பீட்டிற்கும் வெளிப்படையான இரைச்சலை நீக்குவதற்கும் வடிகட்டி முறைகளுடன் (எ.கா., Variance Threshold, புள்ளிவிவர சோதனைகள்) தொடங்குங்கள்.
- மீண்டும் மீண்டும் செய்து மதிப்பீடு செய்யுங்கள்: வெவ்வேறு முறைகளுடன் பரிசோதனை செய்து, பொருத்தமான அளவீடுகள் மற்றும் குறுக்கு-சரிபார்ப்பைப் பயன்படுத்தி உங்கள் மாதிரியின் செயல்திறனில் அவற்றின் தாக்கத்தை மதிப்பீடு செய்யுங்கள்.
- காட்சிப்படுத்துங்கள்: உங்கள் தரவை குறைந்த பரிமாணங்களில் காட்சிப்படுத்த PCA அல்லது t-SNE போன்ற நுட்பங்களைப் பயன்படுத்தவும், இது அடிப்படை கட்டமைப்புகளை வெளிப்படுத்தி உங்கள் கூறு தேர்வு உத்திக்குத் தகவல் அளிக்கும்.
- கள நிபுணத்துவம் முக்கியம்: கூறுகளின் பொருள் மற்றும் பொருத்தத்தைப் புரிந்துகொள்ள கள நிபுணர்களுடன் ஒத்துழைக்கவும், குறிப்பாக சிக்கலான உலகளாவிய தரவைக் கையாளும்போது.
- என்செம்பிள் அணுகுமுறைகளைக் கவனியுங்கள்: பல கூறு தேர்வு நுட்பங்களை இணைப்பது சில நேரங்களில் ஒரு முறையை மட்டும் நம்பியிருப்பதை விட சிறந்த முடிவுகளைத் தரும்.
ஒருங்கிணைந்த பணிப்பாய்வுக்கான Scikit-learn-இன் பைப்லைன்
Scikit-learn-இன் 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}")
பைப்லைன்களைப் பயன்படுத்துவது அளவிடுதல் முதல் கூறு தேர்வு, வகைப்படுத்தல் வரை முழு செயல்முறையும் ஒரே நிறுவனமாக நடத்தப்படுவதை உறுதி செய்கிறது. இது வலுவான மாதிரி மேம்பாட்டிற்கான ஒரு சிறந்த நடைமுறையாகும், குறிப்பாக மாறுபட்ட தரவு விநியோகங்களில் சீரான செயல்திறன் முக்கியமாக இருக்கும் உலகளாவிய பயன்பாட்டிற்காக மாதிரிகள் வடிவமைக்கப்படும்போது.
முடிவுரை
கூறு தேர்வு மற்றும் பிரித்தெடுத்தல் மூலம் பரிமாணக் குறைப்பு என்பது திறமையான, வலுவான மற்றும் விளக்கக்கூடிய இயந்திர கற்றல் மாதிரிகளைக் கட்டமைப்பதில் ஒரு முக்கிய படியாகும். Scikit-learn இந்த சவால்களைச் சமாளிக்க ஒரு விரிவான கருவித்தொகுப்பை வழங்குகிறது, இது உலகெங்கிலும் உள்ள தரவு விஞ்ஞானிகளுக்கு அதிகாரம் அளிக்கிறது. வெவ்வேறு வழிமுறைகளைப் புரிந்துகொள்வதன் மூலம்—வடிகட்டி, ரேப்பர், உட்பொதிக்கப்பட்ட முறைகள், மற்றும் PCA மற்றும் LDA போன்ற கூறு பிரித்தெடுத்தல் நுட்பங்கள்—உங்கள் குறிப்பிட்ட தரவுத்தொகுப்பு மற்றும் நோக்கங்களுக்கு ஏற்ப தகவலறிந்த முடிவுகளை எடுக்கலாம்.
எங்கள் உலகளாவிய பார்வையாளர்களுக்கு, கருத்தாய்வுகள் வெறும் வழிமுறைத் தேர்வுகளுக்கு அப்பாற்பட்டவை. தரவின் தோற்றம், வெவ்வேறு பிராந்தியங்களில் கூறு சேகரிப்பால் அறிமுகப்படுத்தப்படும் சாத்தியமான சார்புகள் மற்றும் உள்ளூர் பங்குதாரர்களின் குறிப்பிட்ட விளக்கமளிக்கும் தேவைகளைப் புரிந்துகொள்வது ஆகியவை முக்கியமானவை. Scikit-learn-இன் Pipeline போன்ற கருவிகளைப் பயன்படுத்துவது ஒரு கட்டமைக்கப்பட்ட மற்றும் மீண்டும் உருவாக்கக்கூடிய பணிப்பாய்வை உறுதி செய்கிறது, இது பல்வேறு சர்வதேச சூழல்களில் நம்பகமான AI தீர்வுகளைப் பயன்படுத்துவதற்கு அவசியம்.
நவீன தரவு அறிவியலின் சிக்கல்களை நீங்கள் கடந்து செல்லும்போது, Scikit-learn-இன் கூறு தேர்வு திறன்களில் தேர்ச்சி பெறுவது சந்தேகத்திற்கு இடமின்றி ஒரு குறிப்பிடத்தக்க சொத்தாக இருக்கும், இது உங்கள் தரவின் முழு திறனையும், அதன் தோற்றத்தைப் பொருட்படுத்தாமல், திறக்க உதவும்.