Parcourir la source

Add of ensemble model

Jerome Buisine il y a 5 ans
Parent
commit
ca6eb89ad3

+ 1 - 1
.gitignore

@@ -1,6 +1,6 @@
 # project data
 data
-svm_data
+data_svm
 
 fichiersSVD
 .python-version

+ 5 - 6
ensemble_model_train.py

@@ -17,8 +17,8 @@ import sys, os, getopt
 output_model_folder = './saved_models/'
 
 def get_best_model(X_train, y_train):
-    parameters = {'kernel':['rbf'], 'C': np.arange(1, 20)}
-    svc = svm.SVC(gamma="scale")
+    parameters = {'kernel':['rbf'], 'C': np.arange(1, 2)}
+    svc = svm.SVC(gamma="scale", probability=True)
     clf = GridSearchCV(svc, parameters, cv=5, scoring='accuracy', verbose=10)
 
     clf.fit(X_train, y_train)
@@ -60,17 +60,16 @@ def main():
     y_dataset = dataset.ix[:,0]
     x_dataset = dataset.ix[:,1:]
 
-    X_train, X_test, y_train, y_test = train_test_split(x_dataset, y_dataset, test_size=0.4, random_state=42)
+    X_train, X_test, y_train, y_test = train_test_split(x_dataset, y_dataset, test_size=0.3333, random_state=42)
 
     svm_model = get_best_model(X_train, y_train)
 
     lr_model = LogisticRegression(solver='lbfgs', multi_class='multinomial', random_state=1)
-    rf_model = RandomForestClassifier(n_estimators=50, random_state=1)
+    rf_model = RandomForestClassifier(n_estimators=100, random_state=1)
 
     ensemble_model = VotingClassifier(estimators=[
        ('svm', svm_model), ('lr', lr_model), ('rf', rf_model)],
-       voting='soft', weights=[2,1,1],
-       flatten_transform=True)
+       voting='soft', weights=[1,1,1])
 
     ensemble_model.fit(X_train, y_train)
 

+ 4 - 1
generate_data_svm.py

@@ -177,7 +177,10 @@ def main():
         elif o in ("-s", "--scenes"):
             p_scenes = a.split(',')
         elif o in ("-z", "--zones"):
-            p_zones = list(map(int, a.split(',')))
+            if ',' in a:
+                p_zones = list(map(int, a.split(',')))
+            else:
+                p_zones = [a.strip()]
         elif o in ("-p", "--percent"):
             p_percent = float(a)
         elif o in ("-s", "--sep"):

+ 9 - 1
prediction.py

@@ -46,7 +46,15 @@ def main():
 
     y_pred = model.predict(x_dataset)
 
-    print("Accuracy found %s " % str(accuracy_score(y_dataset, y_pred)))
+    accuracy = accuracy_score(y_dataset, y_pred)
+
+    print("Accuracy found %s " % str(accuracy))
+
+    with open(p_output, 'w') as f:
+        f.write("Accuracy found %s " % str(accuracy))
+        for prediction in y_pred:
+            f.write(str(prediction) + '\n')
+
 
 if __name__== "__main__":
     main()

BIN
saved_models/ensemble_model.joblib


+ 992 - 0
saved_models/svm_model.joblib.prediction

@@ -0,0 +1,992 @@
+Accuracy found 0.8538306451612904 1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1

+ 22 - 33
testModelByScene.sh

@@ -3,65 +3,54 @@
 if [ -z "$1" ]
   then
     echo "No first argument supplied"
-    echo "Need of vector size"
+    echo "Need of begin vector index"
     exit 1
 fi
 
 if [ -z "$2" ]
+  then
+    echo "No first argument supplied"
+    echo "Need of end vector index"
+    exit 1
+fi
+
+if [ -z "$3" ]
   then
     echo "No second argument supplied"
     echo "Need of model input"
     exit 1
 fi
 
-if [ -z "$3" ]
+if [ -z "$4" ]
   then
     echo "No third argument supplied"
     echo "Need of separator char : ':', ';'"
     exit 1
 fi
 
-if [ -z "$4" ]
+if [ -z "$5" ]
   then
     echo "No fourth argument supplied"
     echo "Need of index row indication : 0 or 1"
     exit 1
 fi
 
-VECTOR_SIZE=$1
-INPUT_MODEL=$2
-INPUT_SEP=$3
-INPUT_ROW=$4
-
+INPUT_BEGIN=$1
+INPUT_END=$2
+INPUT_MODEL=$3
+INPUT_SEP=$4
+INPUT_ROW=$5
 
-for size in {"4","8","16","26","32","40"}; do
+zones="0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15"
 
-  start=0
-  for counter in {0..4}; do
-    end=$(($start+$size))
-
-    if [ "$end" -gt "$VECTOR_SIZE" ]; then
-        start=$(($VECTOR_SIZE-$size))
-        end=$(($VECTOR_SIZE))
-    fi
+for scene in {"A","B","C","D","E","F","G","H","I"}; do
 
+  for mode in {"svd","svdn","svdne"}; do
   
-    zones = "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15"
-    zones_str="${zones//, /-}"
-
-    for scene in {"A","B","C","D","E","F","G","H","I"}; do
+      FILENAME="data_svm/data_${mode}_B${INPUT_BEGIN}_E${INPUT_END}_scene${scene}"
 
-        for mode in {"svd","svdn","svdne"}; do
-            FILENAME="data_svm/data_${mode}_N${size}_B${start}_E${end}_scene${scene}"
+      python generate_data_svm.py --output ${FILENAME} --interval "${INPUT_BEGIN},${INPUT_END}" --kind ${mode} --scenes "${scene}" --zones "${zones}" --percent 1 --sep "${INPUT_SEP}" --rowindex "${INPUT_ROW}"
 
-            echo $FILENAME
-            python generate_data_svm.py --output ${FILENAME} --interval "${start},${end}" --kind ${mode} --scenes "${scene}" --zones "${zones}" --percent 1 --sep "${INPUT_SEP}" --rowindex "${INPUT_ROW}"
-            python prediction.py --data "$FILENAME.train" --model ${INPUT_MODEL} --output "${INPUT_MODEL}.prediction"
-
-        done
-    done
-
-    start=$(($start+50))
+      python prediction.py --data "$FILENAME.train" --model ${INPUT_MODEL} --output "${INPUT_MODEL}_Scene${scene}_mode${mode}.prediction"
   done
-
-done
+done