LASSO (Least Absolute Shrinkage and Selection Operator), değişken seçimli ve cezalandırmalı regresyon tekniğidir. Bu yöntem, önemsiz değişkenlerin ağırlıklarını sıfıra çekerek modelin aşırı öğrenmesini (overfitting) önlemeye çalışır.
import pandas as pd
from sklearn.linear_model import LassoCV
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import numpy as np
# 1. Excel dosyasını oku (örnek dosya adı: alfalfa_data.xlsx)
df = pd.read_excel("alfalfa_data.xlsx")
# 2. Özellik ve hedef sütunlarını ayarla
# Özellikler: bitki indeksleri (değiştirilebilir)
features = ['NDVI', 'GNDVI', 'EVI', 'TDVI', 'MSR', 'OSAVI', 'MNLI', 'CWSI']
target = 'yield'
X = df[features]
y = df[target]
# 3. Veriyi eğitim ve test olarak ayır
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 4. Özellikleri ölçeklendir
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 5. LASSO modeli uygula (Cross-validation ile alfa seçimi)
lasso = LassoCV(cv=5, random_state=42)
lasso.fit(X_train_scaled, y_train)
# 6. Tahmin yap
y_pred = lasso.predict(X_test_scaled)
# 7. Performans değerlendirmesi
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)
print("Optimal alfa değeri:", lasso.alpha_)
print("RMSE:", rmse)
print("R²:", r2)
# 8. Önemli değişkenleri göster
coefficients = pd.Series(lasso.coef_, index=features)
print("\nSeçilen önemli değişkenler:")
print(coefficients[coefficients != 0])
# 9. Gerçek vs Tahmin grafiği
plt.figure(figsize=(6, 6))
plt.scatter(y_test, y_pred, c='blue')
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--')
plt.xlabel("Gerçek Verim (kg)")
plt.ylabel("Tahmin Edilen Verim (kg)")
plt.title("LASSO: Gerçek vs Tahmin Edilen Alfalfa Verimi")
plt.grid(True)
plt.tight_layout()
plt.show()