all-classifier-cls666 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- all_classifier_cls666-0.1.0/LICENSE +7 -0
- all_classifier_cls666-0.1.0/PKG-INFO +38 -0
- all_classifier_cls666-0.1.0/README.md +8 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666/__init__.py +5 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666/config.py +118 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666/tester.py +177 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666.egg-info/PKG-INFO +38 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666.egg-info/SOURCES.txt +11 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666.egg-info/dependency_links.txt +1 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666.egg-info/requires.txt +5 -0
- all_classifier_cls666-0.1.0/all_classifier_cls666.egg-info/top_level.txt +1 -0
- all_classifier_cls666-0.1.0/setup.cfg +4 -0
- all_classifier_cls666-0.1.0/setup.py +26 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright (c) 2026 aribilgiogr
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: all_classifier_cls666
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Home-page: https://github.com/aribilgiogr/Classifier666
|
|
5
|
+
Author: Arı Bilgi
|
|
6
|
+
Author-email: aribilgiogr@gmail.com
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
13
|
+
Requires-Python: >=3.10
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Requires-Dist: pandas
|
|
17
|
+
Requires-Dist: numpy
|
|
18
|
+
Requires-Dist: scikit-learn
|
|
19
|
+
Requires-Dist: xgboost
|
|
20
|
+
Requires-Dist: lightgbm
|
|
21
|
+
Dynamic: author
|
|
22
|
+
Dynamic: author-email
|
|
23
|
+
Dynamic: classifier
|
|
24
|
+
Dynamic: description
|
|
25
|
+
Dynamic: description-content-type
|
|
26
|
+
Dynamic: home-page
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
Dynamic: requires-dist
|
|
29
|
+
Dynamic: requires-python
|
|
30
|
+
|
|
31
|
+
# Classifier Test Library
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Installation:
|
|
36
|
+
```bash
|
|
37
|
+
pip install all-classifier-666
|
|
38
|
+
```
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# ---------------------------------------------------------------------------
|
|
2
|
+
# IMPORT BÖLÜMÜ: Kullanacağımız sınıflandırma algoritmalarını içe aktarıyoruz.
|
|
3
|
+
# "import" = başka bir kütüphanedeki hazır kodu bu dosyada kullanılabilir yapmak.
|
|
4
|
+
# ---------------------------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
# LogisticRegression: Adına rağmen bir SINIFLANDIRMA algoritmasıdır; olasılık hesaplayarak sınıf tahmin eder.
|
|
7
|
+
# SGDClassifier: "Stochastic Gradient Descent" yöntemiyle öğrenen, hızlı ve doğrusal bir sınıflandırıcıdır.
|
|
8
|
+
from sklearn.linear_model import LogisticRegression, SGDClassifier
|
|
9
|
+
|
|
10
|
+
# DecisionTreeClassifier: Veriyi "evet/hayır" sorularıyla dallara ayıran karar ağacı.
|
|
11
|
+
from sklearn.tree import DecisionTreeClassifier
|
|
12
|
+
|
|
13
|
+
# RandomForestClassifier: Çok sayıda karar ağacını birlikte çalıştırıp oy çokluğuyla karar verir (topluluk/ensemble yöntemi).
|
|
14
|
+
# GradientBoostingClassifier: Ağaçları sırayla ekler; her yeni ağaç öncekinin hatalarını düzeltmeye çalışır.
|
|
15
|
+
# AdaBoostClassifier: Zayıf modellerin hatalı tahmin ettiği örneklere daha çok ağırlık vererek öğrenir.
|
|
16
|
+
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier, AdaBoostClassifier
|
|
17
|
+
|
|
18
|
+
# SVC: Destek Vektör Makinesi; sınıfları ayıran en geniş marjinli sınırı bulmaya çalışır.
|
|
19
|
+
from sklearn.svm import SVC
|
|
20
|
+
|
|
21
|
+
# KNeighborsClassifier: Yeni bir örneğin en yakın K komşusuna bakıp çoğunluğun sınıfını seçer.
|
|
22
|
+
from sklearn.neighbors import KNeighborsClassifier
|
|
23
|
+
|
|
24
|
+
# GaussianNB: Naive Bayes; özelliklerin normal dağıldığını varsayıp Bayes teoremiyle olasılık hesaplar.
|
|
25
|
+
from sklearn.naive_bayes import GaussianNB
|
|
26
|
+
|
|
27
|
+
# LDA ve QDA: Sınıfları istatistiksel dağılımlarına göre ayırır. LDA doğrusal, QDA ise eğrisel (ikinci dereceden) sınır çizer.
|
|
28
|
+
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
|
|
29
|
+
|
|
30
|
+
# MLPClassifier: Çok katmanlı yapay sinir ağı (Multi-Layer Perceptron).
|
|
31
|
+
from sklearn.neural_network import MLPClassifier
|
|
32
|
+
|
|
33
|
+
# LGBMClassifier: Microsoft'un geliştirdiği, çok hızlı bir gradient boosting kütüphanesi (scikit-learn dışı).
|
|
34
|
+
from lightgbm import LGBMClassifier
|
|
35
|
+
|
|
36
|
+
# XGBClassifier: Yarışmalarda çok popüler, güçlü bir gradient boosting kütüphanesi (scikit-learn dışı).
|
|
37
|
+
from xgboost import XGBClassifier
|
|
38
|
+
|
|
39
|
+
# ---------------------------------------------------------------------------
|
|
40
|
+
# MODEL LİSTESİ: Karşılaştırmak istediğimiz tüm modelleri bir listede topluyoruz.
|
|
41
|
+
# Her eleman bir "demet" (tuple) yani (görünen_isim, model_nesnesi) çiftidir.
|
|
42
|
+
# Modellerin parantezleri BOŞ olduğu için hepsi varsayılan (default) ayarlarla çalışır.
|
|
43
|
+
# ---------------------------------------------------------------------------
|
|
44
|
+
DEFAULT_MODELS = [
|
|
45
|
+
# Liste başlıyor; her satır bir modeli temsil ediyor.
|
|
46
|
+
('Logistic Regression', LogisticRegression()), # Basit ve hızlı doğrusal sınıflandırıcı
|
|
47
|
+
('Decision Tree', DecisionTreeClassifier()), # Tek bir karar ağacı
|
|
48
|
+
('Random Forest', RandomForestClassifier()), # Birçok karar ağacından oluşan orman
|
|
49
|
+
('SVM', SVC()), # Destek vektör makinesi
|
|
50
|
+
('KNN', KNeighborsClassifier()), # En yakın komşular yöntemi
|
|
51
|
+
('Naive Bayes', GaussianNB()), # Olasılık tabanlı basit model
|
|
52
|
+
('Gradient Boosting', GradientBoostingClassifier()), # Hataları adım adım düzelten ağaç topluluğu
|
|
53
|
+
('AdaBoost', AdaBoostClassifier()), # Zor örneklere odaklanan boosting yöntemi
|
|
54
|
+
('SGD', SGDClassifier()), # Stokastik gradyan inişiyle öğrenen doğrusal model
|
|
55
|
+
('Linear Discriminant Analysis', LinearDiscriminantAnalysis()), # Doğrusal ayrım analizi
|
|
56
|
+
('Quadratic Discriminant Analysis', QuadraticDiscriminantAnalysis()), # Eğrisel ayrım analizi
|
|
57
|
+
('MLP Neural Network', MLPClassifier()), # Yapay sinir ağı
|
|
58
|
+
('LightGBM', LGBMClassifier(verbose=-1)), # verbose=-1 -> eğitim sırasında konsola uyarı/mesaj yazdırma
|
|
59
|
+
('XGBoost', XGBClassifier()) # Güçlü gradient boosting modeli (son eleman, sonunda virgül gerekmez)
|
|
60
|
+
] # Liste burada kapanıyor
|
|
61
|
+
|
|
62
|
+
# ---------------------------------------------------------------------------
|
|
63
|
+
# PARAMETRE SÖZLÜĞÜ: Hiperparametre ayarı (GridSearchCV gibi) için denenecek değerler.
|
|
64
|
+
# Hiperparametre = modeli eğitmeden ÖNCE bizim seçtiğimiz ayarlar (öğrenilen değil).
|
|
65
|
+
# NOT: tester.py bu sözlüğü şu an KULLANMIYOR; ileride ayar yapmak için hazırlanmış.
|
|
66
|
+
# Sözlük yapısı: { 'model_adı': { 'parametre_adı': [denenecek_değerler] } }
|
|
67
|
+
# ---------------------------------------------------------------------------
|
|
68
|
+
DEFAULT_PARAMETERS = {
|
|
69
|
+
# C: Düzenlileştirme gücünün tersi. Küçük C = daha güçlü kısıtlama (aşırı öğrenmeyi azaltır).
|
|
70
|
+
'Logistic Regression': {'C': [0.1, 1.0, 10.0]},
|
|
71
|
+
|
|
72
|
+
# max_depth: Ağacın en fazla kaç seviye derinleşebileceği (None = sınırsız).
|
|
73
|
+
# min_samples_split: Bir düğümün bölünebilmesi için gereken en az örnek sayısı.
|
|
74
|
+
'Decision Tree': {'max_depth': [None, 10, 20], 'min_samples_split': [2, 5]},
|
|
75
|
+
|
|
76
|
+
# n_estimators: Ormandaki ağaç sayısı. max_depth: Her ağacın maksimum derinliği.
|
|
77
|
+
'Random Forest': {'n_estimators': [50, 100], 'max_depth': [None, 10]},
|
|
78
|
+
|
|
79
|
+
# kernel: Verinin nasıl dönüştürüleceği; 'linear' doğrusal, 'rbf' eğrisel sınırlar üretir.
|
|
80
|
+
'SVM': {'C': [0.1, 1.0, 10.0], 'kernel': ['linear', 'rbf']},
|
|
81
|
+
|
|
82
|
+
# n_neighbors: Kaç komşuya bakılacağı. weights: 'uniform' = hepsi eşit, 'distance' = yakın olanın oyu daha değerli.
|
|
83
|
+
'KNN': {'n_neighbors': [3, 5, 7], 'weights': ['uniform', 'distance']},
|
|
84
|
+
|
|
85
|
+
# --- Aşağıdakiler sonradan eklenen modeller ---
|
|
86
|
+
|
|
87
|
+
# var_smoothing: Varyansa eklenen küçük bir sabit; sayısal kararsızlığı önler ve modeli daha esnek/katı yapar.
|
|
88
|
+
# Değerler çok küçük sayılardır (1e-9 = 0.000000001); üstel ölçekte denenir.
|
|
89
|
+
'Naive Bayes': {'var_smoothing': [1e-9, 1e-8, 1e-7]},
|
|
90
|
+
|
|
91
|
+
# n_estimators: Eklenecek ağaç sayısı. learning_rate: Her ağacın katkısının büyüklüğü
|
|
92
|
+
# (küçük değer = yavaş ama daha dikkatli öğrenme). max_depth: Her ağacın derinliği (boosting'de genelde sığ tutulur).
|
|
93
|
+
'Gradient Boosting': {'n_estimators': [50, 100], 'learning_rate': [0.05, 0.1, 0.5], 'max_depth': [2, 3, 5]},
|
|
94
|
+
|
|
95
|
+
# n_estimators: Zayıf model sayısı. learning_rate: Her zayıf modelin ağırlığını küçültür/büyütür.
|
|
96
|
+
'AdaBoost': {'n_estimators': [50, 100, 200], 'learning_rate': [0.1, 0.5, 1.0]},
|
|
97
|
+
|
|
98
|
+
# loss: Hata fonksiyonu; 'hinge' SVM gibi, 'log_loss' lojistik regresyon gibi davranır.
|
|
99
|
+
# alpha: Düzenlileştirme gücü (büyük alpha = daha basit model).
|
|
100
|
+
'SGD': {'loss': ['hinge', 'log_loss'], 'alpha': [0.0001, 0.001, 0.01]},
|
|
101
|
+
|
|
102
|
+
# solver: Hesaplama yöntemi. 'svd' varsayılandır, 'lsqr' ise en küçük kareler yöntemidir.
|
|
103
|
+
# (shrinkage parametresi sadece 'lsqr'/'eigen' ile çalıştığı için, hata çıkmasın diye bilerek eklemedik.)
|
|
104
|
+
'Linear Discriminant Analysis': {'solver': ['svd', 'lsqr']},
|
|
105
|
+
|
|
106
|
+
# reg_param: Kovaryans matrisini düzenlileştirir. 0 = hiç düzenlileştirme, büyük değer = daha kararlı ama daha basit model.
|
|
107
|
+
'Quadratic Discriminant Analysis': {'reg_param': [0.0, 0.1, 0.5]},
|
|
108
|
+
|
|
109
|
+
# hidden_layer_sizes: Gizli katman yapısı. (50,) = 50 nöronlu tek katman, (50, 50) = 50'şer nöronlu iki katman.
|
|
110
|
+
# activation: Nöronların aktivasyon fonksiyonu. alpha: Düzenlileştirme gücü (aşırı öğrenmeyi azaltır).
|
|
111
|
+
'MLP Neural Network': {'hidden_layer_sizes': [(50,), (100,), (50, 50)], 'activation': ['relu', 'tanh'], 'alpha': [0.0001, 0.001]},
|
|
112
|
+
|
|
113
|
+
# num_leaves: Ağaçtaki en fazla yaprak sayısı (LightGBM'in en önemli ayarı). Büyük değer = daha karmaşık model.
|
|
114
|
+
'LightGBM': {'n_estimators': [50, 100], 'learning_rate': [0.05, 0.1], 'num_leaves': [15, 31]},
|
|
115
|
+
|
|
116
|
+
# XGBoost'ta max_depth ağaç derinliğini, learning_rate öğrenme hızını, n_estimators ağaç sayısını belirler.
|
|
117
|
+
'XGBoost': {'n_estimators': [50, 100], 'learning_rate': [0.05, 0.1, 0.3], 'max_depth': [3, 5, 7]},
|
|
118
|
+
} # Sözlük burada kapanıyor; artık DEFAULT_MODELS'taki 14 modelin hepsi için parametre var
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# ---------------------------------------------------------------------------
|
|
2
|
+
# IMPORT BÖLÜMÜ
|
|
3
|
+
# ---------------------------------------------------------------------------
|
|
4
|
+
|
|
5
|
+
# warnings: Python'un uyarı mesajlarını yönetmemizi sağlayan standart kütüphane.
|
|
6
|
+
import warnings
|
|
7
|
+
|
|
8
|
+
# pandas: Tablo (DataFrame) biçiminde veri işlemek için kullanılan kütüphane. "pd" kısaltmasıyla çağırılır.
|
|
9
|
+
import pandas as pd
|
|
10
|
+
from sklearn import clone
|
|
11
|
+
|
|
12
|
+
# train_test_split: Veriyi "eğitim" ve "test" olarak ikiye bölen fonksiyon.
|
|
13
|
+
from sklearn.model_selection import train_test_split, GridSearchCV
|
|
14
|
+
|
|
15
|
+
# StandardScaler: Sayısal özellikleri ortalaması 0, standart sapması 1 olacak şekilde ölçekler.
|
|
16
|
+
from sklearn.preprocessing import StandardScaler
|
|
17
|
+
|
|
18
|
+
# accuracy_score: Doğru tahmin oranını verir.
|
|
19
|
+
# classification_report: Precision, Recall, F1 gibi detaylı metrikleri raporlar.
|
|
20
|
+
from sklearn.metrics import accuracy_score, classification_report
|
|
21
|
+
|
|
22
|
+
from all_classifier_666.config import DEFAULT_PARAMETERS
|
|
23
|
+
# config.py dosyamızdan hazırladığımız model listesini alıyoruz.
|
|
24
|
+
from config import DEFAULT_MODELS
|
|
25
|
+
|
|
26
|
+
# Uyarı mesajlarını gizle: Eğitim sırasında çıkan "convergence warning" gibi mesajlar ekranı kirletmesin diye.
|
|
27
|
+
# (Dikkat: Gerçek projelerde uyarılar önemli bilgi taşıyabilir, bilinçli kullanın.)
|
|
28
|
+
warnings.filterwarnings("ignore")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# ---------------------------------------------------------------------------
|
|
32
|
+
# ANA FONKSİYON: Tüm modelleri eğitir, test eder ve sonuçları tablo olarak döndürür.
|
|
33
|
+
# Parametrelerin yanındaki ": float" gibi ifadeler "tip ipucu"dur (beklenen veri türünü belirtir).
|
|
34
|
+
# "-> pd.DataFrame" fonksiyonun bir DataFrame döndüreceğini söyler.
|
|
35
|
+
# Eşittir ile verilen değerler (test_size=.3 gibi) VARSAYILAN değerlerdir; çağırırken verilmezse bunlar kullanılır.
|
|
36
|
+
# ---------------------------------------------------------------------------
|
|
37
|
+
def test_data(X, y, test_size: float = .3, random_state: int = 42, scale_data: bool = True,
|
|
38
|
+
use_grid_search: bool = False, cv: int = 3) -> pd.DataFrame:
|
|
39
|
+
"""
|
|
40
|
+
Test multiple classification models and return their performance metric values.
|
|
41
|
+
|
|
42
|
+
:param X: Feature matrix
|
|
43
|
+
:param y: Target vector
|
|
44
|
+
:param test_size: Proportion of the dataset to include in the test set
|
|
45
|
+
:param random_state: Random seed for reproducibility
|
|
46
|
+
:param scale_data: Whether to scale the data before fitting models
|
|
47
|
+
:return:
|
|
48
|
+
DataFrame: Results comparing all classifiers
|
|
49
|
+
"""
|
|
50
|
+
# Yukarıdaki üç tırnaklı metne "docstring" denir: fonksiyonun ne yaptığını anlatan resmi dokümantasyondur.
|
|
51
|
+
# X = özellikler (girdiler), y = hedef (tahmin etmeye çalıştığımız sınıf etiketi).
|
|
52
|
+
|
|
53
|
+
# Veriyi ikiye bölüyoruz:
|
|
54
|
+
# - Eğitim seti: Modelin öğrendiği kısım.
|
|
55
|
+
# - Test seti: Modelin hiç görmediği, başarısını ölçtüğümüz kısım.
|
|
56
|
+
# test_size=0.3 -> verinin %30'u test için ayrılır.
|
|
57
|
+
# random_state=42 -> her çalıştırmada aynı bölme elde edilsin (tekrarlanabilirlik).
|
|
58
|
+
# stratify=y -> sınıf oranları eğitim ve testte aynı kalsın (dengeli dağılım).
|
|
59
|
+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state,
|
|
60
|
+
stratify=y)
|
|
61
|
+
|
|
62
|
+
# Eğer ölçekleme isteniyorsa aşağıdaki blok çalışır.
|
|
63
|
+
if scale_data:
|
|
64
|
+
# Ölçekleyici nesnesini oluşturuyoruz.
|
|
65
|
+
scaler = StandardScaler()
|
|
66
|
+
|
|
67
|
+
# fit_transform: Ortalama ve standart sapmayı SADECE eğitim verisinden öğrenir ve eğitimi dönüştürür.
|
|
68
|
+
X_train = scaler.fit_transform(X_train)
|
|
69
|
+
|
|
70
|
+
# transform: Test verisini, eğitimden öğrenilen aynı değerlerle dönüştürür.
|
|
71
|
+
# Neden fit yok? Test verisinden bilgi sızarsa (data leakage) sonuçlar olduğundan iyi görünür.
|
|
72
|
+
X_test = scaler.transform(X_test)
|
|
73
|
+
|
|
74
|
+
# Her modelin sonucunu biriktireceğimiz boş liste.
|
|
75
|
+
results = []
|
|
76
|
+
|
|
77
|
+
# Listedeki her (isim, model) çiftini sırayla dolaşıyoruz. Tuple açma (unpacking) kullanılıyor.
|
|
78
|
+
for name, base_model in DEFAULT_MODELS:
|
|
79
|
+
# try-except: Bir model hata verirse tüm program çökmesin, diğer modellere devam edilsin.
|
|
80
|
+
try:
|
|
81
|
+
grid_model = clone(base_model)
|
|
82
|
+
best_params = None
|
|
83
|
+
# Modeli eğitim verisiyle eğit (öğrenme aşaması).
|
|
84
|
+
if use_grid_search and name in DEFAULT_PARAMETERS:
|
|
85
|
+
grid_search = GridSearchCV(
|
|
86
|
+
estimator=grid_model,
|
|
87
|
+
param_grid=DEFAULT_PARAMETERS[name],
|
|
88
|
+
cv=cv,
|
|
89
|
+
scoring='accuracy',
|
|
90
|
+
n_jobs=-1
|
|
91
|
+
)
|
|
92
|
+
grid_search.fit(X_train, y_train)
|
|
93
|
+
model = grid_search.best_estimator_
|
|
94
|
+
best_params = grid_search.best_params_
|
|
95
|
+
else:
|
|
96
|
+
model = grid_model
|
|
97
|
+
model.fit(X_train, y_train)
|
|
98
|
+
|
|
99
|
+
# Eğitilen modelle test verisi için tahmin üret.
|
|
100
|
+
y_pred = model.predict(X_test)
|
|
101
|
+
|
|
102
|
+
# Doğruluk (accuracy): Doğru tahmin sayısı / toplam tahmin sayısı.
|
|
103
|
+
acc = accuracy_score(y_test, y_pred)
|
|
104
|
+
|
|
105
|
+
# Detaylı raporu sözlük (dict) formatında al ki içindeki değerlere kod ile erişebilelim.
|
|
106
|
+
report = classification_report(y_test, y_pred, output_dict=True)
|
|
107
|
+
|
|
108
|
+
# Bu modelin sonuçlarını bir sözlük olarak listeye ekle.
|
|
109
|
+
results.append({
|
|
110
|
+
'Classifier': name, # Modelin adı
|
|
111
|
+
'Accuracy': acc, # Genel doğruluk
|
|
112
|
+
# Precision (kesinlik): "Pozitif dedim" dediklerimin kaçı gerçekten doğruydu?
|
|
113
|
+
# 'weighted avg': Sınıfların örnek sayısına göre ağırlıklı ortalama.
|
|
114
|
+
'Precision': report['weighted avg']['precision'],
|
|
115
|
+
# Recall (duyarlılık): Gerçekte pozitif olanların kaçını yakalayabildim?
|
|
116
|
+
'Recall': report['weighted avg']['recall'],
|
|
117
|
+
# F1-Score: Precision ve Recall'ın dengeli (harmonik) ortalaması.
|
|
118
|
+
'F1-Score': report['weighted avg']['f1-score'],
|
|
119
|
+
'Best Parameters': best_params
|
|
120
|
+
}) # Sözlük ve append işlemi burada bitiyor
|
|
121
|
+
|
|
122
|
+
# Herhangi bir hata olursa buraya düşer; hata nesnesi "e" değişkenine atanır.
|
|
123
|
+
except Exception as e:
|
|
124
|
+
# Hangi modelde ne hata olduğunu ekrana yazdır (f-string ile değişkenler metne gömülür).
|
|
125
|
+
print(f"Error with {name}: {str(e)}")
|
|
126
|
+
|
|
127
|
+
# Hata veren model için boş (None) değerlerle bir satır ekle ki tabloda görünsün.
|
|
128
|
+
results.append({
|
|
129
|
+
'Classifier': name,
|
|
130
|
+
'Accuracy': None,
|
|
131
|
+
'Precision': None,
|
|
132
|
+
'Recall': None,
|
|
133
|
+
'F1-Score': None,
|
|
134
|
+
'Best Parameters': None
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
# Sözlük listesini tabloya (DataFrame) çevir: her sözlük bir satır olur.
|
|
138
|
+
result_df = pd.DataFrame(results)
|
|
139
|
+
|
|
140
|
+
# Doğruluğa göre büyükten küçüğe sırala (en iyi model en üstte).
|
|
141
|
+
# reset_index(drop=True): Sıralamadan sonra bozulan satır numaralarını 0,1,2... diye yeniden düzenler.
|
|
142
|
+
# Not: None değerler sıralamada en sona atılır.
|
|
143
|
+
result_df = result_df.sort_values(by='Accuracy', ascending=False).reset_index(drop=True)
|
|
144
|
+
|
|
145
|
+
# Sonuç tablosunu fonksiyonu çağıran yere geri gönder.
|
|
146
|
+
return result_df
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
# ---------------------------------------------------------------------------
|
|
150
|
+
# ÇALIŞTIRMA BLOĞU
|
|
151
|
+
# Bu koşul, dosya DOĞRUDAN çalıştırıldığında True olur (python tester.py).
|
|
152
|
+
# Başka bir dosyadan "import" edilirse bu blok çalışmaz; böylece dosya hem kütüphane hem betik olarak kullanılabilir.
|
|
153
|
+
# ---------------------------------------------------------------------------
|
|
154
|
+
if __name__ == '__main__':
|
|
155
|
+
# Iris: Çiçek türlerini sınıflandırmak için kullanılan klasik küçük örnek veri seti.
|
|
156
|
+
from sklearn.datasets import load_iris
|
|
157
|
+
|
|
158
|
+
# Tabloyu yazdırırken tüm sütunlar görünsün (None = sınırsız).
|
|
159
|
+
pd.set_option('display.max_columns', None)
|
|
160
|
+
|
|
161
|
+
# Tabloyu yazdırırken tüm satırlar görünsün.
|
|
162
|
+
pd.set_option('display.max_rows', None)
|
|
163
|
+
|
|
164
|
+
# Veri setini yükle.
|
|
165
|
+
iris = load_iris()
|
|
166
|
+
|
|
167
|
+
# iris.data: Özellikler (çiçek yaprağı/çanak yaprağı ölçüleri).
|
|
168
|
+
X = iris.data
|
|
169
|
+
|
|
170
|
+
# iris.target: Hedef (çiçek türü: 0, 1 veya 2).
|
|
171
|
+
y = iris.target
|
|
172
|
+
|
|
173
|
+
# Tüm modelleri test et ve sonuç tablosunu al.
|
|
174
|
+
df = test_data(X, y,use_grid_search=True)
|
|
175
|
+
|
|
176
|
+
# Sonuç tablosunu ekrana yazdır.
|
|
177
|
+
print(df)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: all_classifier_cls666
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Home-page: https://github.com/aribilgiogr/Classifier666
|
|
5
|
+
Author: Arı Bilgi
|
|
6
|
+
Author-email: aribilgiogr@gmail.com
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
13
|
+
Requires-Python: >=3.10
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Requires-Dist: pandas
|
|
17
|
+
Requires-Dist: numpy
|
|
18
|
+
Requires-Dist: scikit-learn
|
|
19
|
+
Requires-Dist: xgboost
|
|
20
|
+
Requires-Dist: lightgbm
|
|
21
|
+
Dynamic: author
|
|
22
|
+
Dynamic: author-email
|
|
23
|
+
Dynamic: classifier
|
|
24
|
+
Dynamic: description
|
|
25
|
+
Dynamic: description-content-type
|
|
26
|
+
Dynamic: home-page
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
Dynamic: requires-dist
|
|
29
|
+
Dynamic: requires-python
|
|
30
|
+
|
|
31
|
+
# Classifier Test Library
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Installation:
|
|
36
|
+
```bash
|
|
37
|
+
pip install all-classifier-666
|
|
38
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
setup.py
|
|
4
|
+
all_classifier_cls666/__init__.py
|
|
5
|
+
all_classifier_cls666/config.py
|
|
6
|
+
all_classifier_cls666/tester.py
|
|
7
|
+
all_classifier_cls666.egg-info/PKG-INFO
|
|
8
|
+
all_classifier_cls666.egg-info/SOURCES.txt
|
|
9
|
+
all_classifier_cls666.egg-info/dependency_links.txt
|
|
10
|
+
all_classifier_cls666.egg-info/requires.txt
|
|
11
|
+
all_classifier_cls666.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
all_classifier_cls666
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
with open("README.md", "r", encoding="utf-8") as fh:
|
|
4
|
+
long_description = fh.read()
|
|
5
|
+
|
|
6
|
+
setup(
|
|
7
|
+
name="all_classifier_cls666",
|
|
8
|
+
version="0.1.0",
|
|
9
|
+
author="Arı Bilgi",
|
|
10
|
+
author_email="aribilgiogr@gmail.com",
|
|
11
|
+
description="",
|
|
12
|
+
long_description=long_description,
|
|
13
|
+
long_description_content_type="text/markdown",
|
|
14
|
+
url="https://github.com/aribilgiogr/Classifier666",
|
|
15
|
+
packages=find_packages(),
|
|
16
|
+
install_requires=["pandas", "numpy", "scikit-learn", "xgboost", "lightgbm"],
|
|
17
|
+
classifiers=[
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Operating System :: OS Independent",
|
|
21
|
+
"Intended Audience :: Developers",
|
|
22
|
+
"Intended Audience :: Science/Research",
|
|
23
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence"
|
|
24
|
+
],
|
|
25
|
+
python_requires='>=3.10'
|
|
26
|
+
)
|