

入れ子の交差検証（性能評価用の外側ループ、チューニング用の内側ループともに5分割）を、ホールドアウト形式で書いてみたんですが、 **出力結果が合いません**
。  
読み込んでいるcsvの内容は、3列目がラベル情報で、上から5個ずつ1と0が交互に50行分格納されています。特徴量は4～17列に格納されています。

入れ子構造の交差検証のコードが間違っているのでしょうか？  
それとも、ホールドアウト検証のコードにおけるデータの分割の仕方、あるいは標準化のコードに問題があるんでしょうか？  
とちらに間違いがあるのか自己解決できないため質問させていただきます。  
ご教授をよろしくお願いします。

**入れ子構造の交差検証**

[code]

    df=pd.read_csv('data.csv',encoding="shift-jis")
    X = df.iloc[0:,3:17].values
    y = df.iloc[0:,2].values
    
    pipe_svc = make_pipeline(StandardScaler(),
                             SVC())
    param_range = [0.01, 0.1, 1.0, 10.0, 100.0]
    param_grid = [{'svc__C': param_range, 
                   'svc__kernel': ['linear']},
                  {'svc__C': param_range, 
                   'svc__gamma': param_range, 
                   'svc__kernel': ['rbf']}]
    
    score_funcs = {'accuracy': 'accuracy',
                   'precision': 'precision',
                   'recall' :'recall',
                   'f1': 'f1',
                   }
    
    gs = GridSearchCV(estimator=pipe_svc,
                      param_grid=param_grid,
                      scoring='f1',
                      cv=5)
    
    scores = cross_validate(gs, X, y, 
                             scoring=score_funcs, cv=5)
    
    print('accuracy:', scores['test_accuracy'].mean(),scores['test_accuracy'].std())
    
[/code]

**ホールドアウト検証**

[code]

    df=pd.read_csv('data.csv',encoding="shift-jis")
    X_train =df.iloc[10:,3:17]
    y_train =df.iloc[10:,2]
    X_test=df.iloc[0:10,3:17]
    y_test=df.iloc[0:10,2]
    
    scaler=StandardScaler()
    X_scaled=scaler.fit_transform(X_train)
    X_train_scaled= pd.DataFrame(X_scaled,columns=X_train.columns)
    X_test_scaled = pd.DataFrame(scaler.transform(X_test), columns=X_train.columns)
    
    svm = SVC()
    kf = KFold(n_splits=5, shuffle=False, random_state=None)
    
    candidate_params = {'C': [0.01,0.1,1, 10, 100],
                        'gamma': [0.01, 0.1, 1,10,100],
                        'kernel':['rbf','linear']}
    
    gs = GridSearchCV(estimator=svm, param_grid=candidate_params, cv=kf, scoring='f1',n_jobs=-1)
    gs.fit(X_train_scaled, y_train)
    
    svm_fold1=SVC(**gs.best_params_)
    svm_fold1.fit(X_train_scaled,y_train)
    test_score=svm_fold1.score(X_test_scaled,y_test)
    
    acc=accuracy_score(y_test,y_pred)
    print(f"acc:{acc*100:.2f}%")
    
[/code]


CC BY-SA 4.0
2021-09-18T08:40:37.680
82562
2021-09-18T08:53:17.397
2021-09-18T08:53:17.397
3060
48146
question
python 機械学習
入れ子の交差検証をホールドアウト検証形式で書いてみたけど、出力結果が合わない