1.前提・実現したいこと
NameError: name 'y_test' is not definedとなり,変数が定義されてない理由が知りたい。
2.発生している問題・エラーメッセージ
NameError Traceback (most recent call last)
<ipython-input-3-81806d1e191e> in <module>()
1 if name == 'main':
2 main()
----> 3 y_test
NameError: name 'y_test' is not defined
3.該当のソースコード
python3
import xgboost as xgb import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score """XGBoost で二値分類するサンプルコード""" def main(): # 乳がんデータセットを読み込む dataset = datasets.load_breast_cancer() X, y = dataset.data, dataset.target # データセットを学習用と検証用に分割する X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=True, random_state=42, stratify=y) # XGBoost が扱うデータセットの形式に直す dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) # 学習用のパラメータ xgb_params = { # 二値分類問題 'objective': 'binary:logistic', # 評価指標 'eval_metric': 'logloss', } # モデルを学習する bst = xgb.train(xgb_params, dtrain, num_boost_round=100, # 学習ラウンド数は適当 ) # 検証用データが各クラスに分類される確率を計算する y_pred_proba = bst.predict(dtest) # しきい値 0.5 で 0, 1 に丸める y_pred = np.where(y_pred_proba > 0.5, 1, 0) # 精度 (Accuracy) を検証する acc = accuracy_score(y_test, y_pred) print('Accuracy:', acc) if __name__ == '__main__': main() #y_testの値を確認 y_test###ここまでで、コード実行してエラー発生## #提出用ファイル作成 import pandas as pd import csv, os, time df = pd.DataFrame({'y_test':y_test,'y_pred':y_pred}) #pandas.DataFrameは二次元の表形式のデータ(テーブルデータ)を表す、pandasの基本的な型。 print(df) #ファイルの書き出し filename ='test.csv' df.to_csv(filename,index=False) !ls !cp "./{filename}" ./drive/MyDrive/
4.自分で調べたことや試したこと
name 'y_test' is not definedについて、ネット検索した。
つまり、「y_testが定義されていない」ということであるが、
データセットを学習用と検証用に分割したコードで、y_test
が定義されていると思います。ちなみに、main()が実施されて、分割コード
が実施され、その下に「print(y_test)」については表記されています。
5.使っているツールのバージョンなど補足情報
開発環境:Google Colaboratory
プログラム言語:python3
OS:windows10 Home
CPU:Intel(R) Core(TM) i7-7500U CPU@2.70GHz 2.90GHz
まだ回答がついていません
会員登録して回答してみよう