Çözüldü DVM modeli ile parametre optimizasyonu ne kadar sürer?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
8 Eylül 2018
Mesajlar
9.603
Makaleler
8
Çözümler
224
Yer
İstanbul
Merhaba arkadaşlar,

Bir regresyon probleminde, destek vektör makinesi (SVR) modelini kullanarak veri üzerinde tahmin yapmam lazım. Verim yaklaşık 2700 satır ve birkaç kategorik ile sayısal özelliğe sahip. Bu modelin eğitim ve test süresiyle ilgili tahminlerde bulunmak istiyorum.

Python:
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score


file_path = r"C:\Users\Emre\Downloads\cleaned_dataset_no_outliers.xlsx" 
data = pd.read_excel(file_path)


y = data['Fiyat (TL)']
num_cols = ['Brüt m²', 'Net m²', 'Oda Sayısı Numeric', 'Kat Sayısı Numeric', 'Banyo Sayısı', 'Aidat (TL)', 'Bina Yaşı Ortalama', 'Bulunduğu Kat (Dönüştürülmüş)']
cat_cols = ['Mahalle', 'Isıtma', 'Krediye Uygun', 'Tapu Durumu', 'Kimden', 'Takas', 'Site Adı']


for col in num_cols:
    data[col] = pd.to_numeric(data[col], errors='coerce')
    data[col] = data[col].fillna(data[col].mean())

for col in cat_cols:
    data[col] = data[col].fillna('Belirtilmemiş')

X = data[num_cols + cat_cols]

# 3. Eğitim-test bölme
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


preprocessor = ColumnTransformer(
    transformers=[
        ('num', 'passthrough', num_cols),
        ('cat', OneHotEncoder(handle_unknown='ignore'), cat_cols)
    ])


pipeline = Pipeline([
    ('preprocessor', preprocessor),
    ('svr', SVR())
])


param_grid = {
    'svr__kernel': ['linear', 'rbf', 'poly'],
    'svr__C': [0.1, 1, 10, 100],
    'svr__gamma': ['scale', 'auto'],
    'svr__degree': [3, 4, 5]  # Sadece poly kernel için anlamlı
}

# 7. Grid Search (5 kat çapraz doğrulama)
grid_search = GridSearchCV(pipeline, param_grid, cv=5, scoring='r2', n_jobs=-1, verbose=2)
grid_search.fit(X_train, y_train)


print("En iyi parametreler:", grid_search.best_params_)


best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)

mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f'Test Seti MSE: {mse:.2f}')
print(f'Test Seti MAE: {mae:.2f}')
print(f'Test Seti R2: {r2:.2f}')


svr_model = best_model.named_steps['svr']
print(f'Destek Vektörleri Sayısı: {len(svr_model.support_)}')


Grid Search işlemi ile toplamda 72 farklı parametre kombinasyonu üzerinde eğitim yapmayı planlıyorum. Bu kombinasyonlar için 5 kat çapraz doğrulama yapılacak. Modelin eğitimi SVR kullanılarak yapılacak ve her eğitim süresi, özellikle 2700 satırlık veri ile ne kadar sürebilir?

İşlemcim i7 11800H.


Eğitim ve optimizasyon süresi hakkında tahminlerde bulunabilir misiniz? Eğitimin yaklaşık olarak kaç dakikada tamamlanır? Dün sistemi başlattığımda 2 saat geçmesine rağmen sonuç alamadım ve fanları ayarlamak istediğimde NitroSense açılmadığı için işlemi yarıda kestim ve şimdi yeniden başlattım.
 
Çözüm
@923393 tavsiyeniz için teşekkür ederim, gerçekten işe yaradı. Linear kernel + C=10 kombinasyonu en iyi sonucu verdi. %10 veriyle bile R² ≈ 0.66 aldım, MAE de yaklaşık 638 bin TL çıktı. Şimdi tam veriyle eğitip diğer modellerle de karşılaştırmayı düşünüyorum. Destek vektörleri sayısı da 182 çıktı. Gerçekten dediğin gibi önce küçük çaplı denemek çok zaman.
Harika haberler hocam 😁 %10 veriyle bile R2 değerinin 0.66 civarında olması MAE'nin 638 bin TL çıkması modelin bir şeyler öğrendiğini gösteriyor. Tabii sadece öncü bir gösterge bu, tam veriyle sonuçlar değişebilir ama en azından doğru yolda olduğumuza dair güzel bir işaret.

Tam veriyle eğitime geçerken bu linear kernel ve C=10 kombinasyonunu direkt kullanabilrsin ya da belki C değeri için 10'un etrafında birkaç farklı değer daha (5, 20 gibi) deneyerek linear kernel özelinde minik bir grid search daha yapabilirsin. Ama şu anki bulgularınla doğrudan devam etmek de gayet iyi bir seçenek.

Sonuçları merakla bekliyorum. Kolay gelsin 😁
Merhaba hocam. Öncelikle, 2700 satır veriyle çalışıyorsun, bu aslında devasa bir rakam değil. Ama işin içine kategorik değişkenler girince onları sayısala çevirdiğimizde sütun sayısı bir anda fırlayabiliyor. Bu da SVR'in özellikle rbf ya da poly gibi daha karmaşık kernellerle çalışırken bayağı bir zaman harcamasına neden olabiliyor. Bir de sen 72 farklı parametre kombinasyonunu 5 katlı çapraz doğrulamayla deniyorsun ya, bu da demek oluyor ki 360 defa eğitilecek. İşte bu yüzden süreler uzuyor.

Benim aklıma gelen ilk şey bu devasa eğitime başlamadan önce kısa bir antrenman yapmak. Yani tüm o 72 kombinasyonu birden denemek yerine param grid'ini şöyle bir-iki basit kombinasyona indirge. Mesela sadece linear kerneli ve bir-iki tane C değeriyle dene. Hatta istersen çapraz doğrulamayı da 5'ten 2'ye ya da 3'e düşür. Amacımız tek bir modelin aşağı yukarı ne kadar sürede eğitildiğini görmek. Eğer bu "mini" deneme bile çok uzun sürüyorsa o zaman belki veriyi önden işlerken yaptığın adımlarda ya da direkt SVR'in kendisinde bir optimizasyon düşünek gerekebilir.

Ya da yukarıda dediklerim yerine verinin küçük bir kısmıyla (mesela %10'uyla) bu mini denemeyi yapabilirsin. Genel resim hakkında bir fikrimiz olur. Oradaki verbose parametresini biraz arttırırsan her adımda ne olup bittiğini, hangi parametrenin ne kadar zaman aldığını daha net görürsün, hangi ayarın seni o kadar beklettiğini görürsün.
 
@923393 tavsiyeniz için teşekkür ederim, gerçekten işe yaradı. Linear kernel + C=10 kombinasyonu en iyi sonucu verdi. %10 veriyle bile R² ≈ 0.66 aldım, MAE de yaklaşık 638 bin TL çıktı. Şimdi tam veriyle eğitip diğer modellerle de karşılaştırmayı düşünüyorum. Destek vektörleri sayısı da 182 çıktı. Gerçekten dediğin gibi önce küçük çaplı denemek çok zaman.
 
@923393 tavsiyeniz için teşekkür ederim, gerçekten işe yaradı. Linear kernel + C=10 kombinasyonu en iyi sonucu verdi. %10 veriyle bile R² ≈ 0.66 aldım, MAE de yaklaşık 638 bin TL çıktı. Şimdi tam veriyle eğitip diğer modellerle de karşılaştırmayı düşünüyorum. Destek vektörleri sayısı da 182 çıktı. Gerçekten dediğin gibi önce küçük çaplı denemek çok zaman.
Harika haberler hocam 😁 %10 veriyle bile R2 değerinin 0.66 civarında olması MAE'nin 638 bin TL çıkması modelin bir şeyler öğrendiğini gösteriyor. Tabii sadece öncü bir gösterge bu, tam veriyle sonuçlar değişebilir ama en azından doğru yolda olduğumuza dair güzel bir işaret.

Tam veriyle eğitime geçerken bu linear kernel ve C=10 kombinasyonunu direkt kullanabilrsin ya da belki C değeri için 10'un etrafında birkaç farklı değer daha (5, 20 gibi) deneyerek linear kernel özelinde minik bir grid search daha yapabilirsin. Ama şu anki bulgularınla doğrudan devam etmek de gayet iyi bir seçenek.

Sonuçları merakla bekliyorum. Kolay gelsin 😁
 
Çözüm

Technopat Haberler

Yeni konular

Geri
Yukarı