前提・実現したいこと
概ね、上のURL通りの学習をしていますが、どうも後も6番目のアルゴリズムの施行の際にエラーが起きてしまいます。
テキストを読みながら、google colabでメインに学習しています。
エラーメッセージから、yの値がstr型ではできないアルゴリズムを試行している感じはあるのですが...
~~このエラーの回避はどうすればいいのでしょうか?
~~
追)エラー回避ができました。そうなると、そもそもなぜこのエラーが起こったかが問題になります。試したことのところに記載してあります。
発生している問題・エラーメッセージ
1AdaBoostClassifier の正解率= 0.9666666666666667 2BaggingClassifier の正解率= 0.9666666666666667 3BernoulliNB の正解率= 0.26666666666666666 4CalibratedClassifierCV の正解率= 0.9666666666666667 5CategoricalNB の正解率= 0.9333333333333333 6--------------------------------------------------------------------------- 7ValueError Traceback (most recent call last) 8<ipython-input-46-e861a1f245d7> in <module>() 9 3 clf = algorithm() 10 4 11----> 5 clf.fit(x_train, y_train) 12 6 13 7 y_pred = clf.predict(x_test) 14 156 frames 16/usr/local/lib/python3.6/dist-packages/sklearn/utils/_mocking.py in fit(self, X, y, **fit_params) 17 93 assert self.check_y(y) 18 94 self.classes_ = np.unique(check_array(y, ensure_2d=False, 19---> 95 allow_nd=True)) 20 96 if self.expected_fit_params: 21 97 missing = set(self.expected_fit_params) - set(fit_params) 22 23/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 24 529 array = array.astype(dtype, casting="unsafe", copy=False) 25 530 else: 26--> 531 array = np.asarray(array, order=order, dtype=dtype) 27 532 except ComplexWarning: 28 533 raise ValueError("Complex data not supported\n" 29 30/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order) 31 83 32 84 """ 33---> 85 return array(a, dtype, copy=False, order=order) 34 86 35 87 36 37/usr/local/lib/python3.6/dist-packages/pandas/core/series.py in __array__(self, dtype) 38 949 warnings.warn(msg, FutureWarning, stacklevel=3) 39 950 dtype = "M8[ns]" 40--> 951 return np.asarray(self.array, dtype) 41 952 42 953 # ---------------------------------------------------------------------- 43 44/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order) 45 83 46 84 """ 47---> 85 return array(a, dtype, copy=False, order=order) 48 86 49 87 50 51/usr/local/lib/python3.6/dist-packages/pandas/core/arrays/numpy_.py in __array__(self, dtype) 52 164 53 165 def __array__(self, dtype=None): 54--> 166 return np.asarray(self._ndarray, dtype=dtype) 55 167 56 168 _HANDLED_TYPES = (np.ndarray, numbers.Number) 57 58/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order) 59 83 60 84 """ 61---> 85 return array(a, dtype, copy=False, order=order) 62 86 63 87 64 65ValueError: could not convert string to float: 'Iris-versicolor'
jupiternoteboook
1AdaBoostClassifier の正解率= 0.7333333333333333 2BaggingClassifier の正解率= 0.7333333333333333 3BernoulliNB の正解率= 0.0 4CalibratedClassifierCV の正解率= 0.4666666666666667 5CheckingClassifier の正解率= 0.0 6--------------------------------------------------------------------------- 7TypeError Traceback (most recent call last) 8<ipython-input-2-46de1eef946c> in <module> 9 16 allAlgorithms = all_estimators(type_filter="classifier") 10 17 for (name, algorithm) in allAlgorithms: 11---> 18 clf = algorithm() 12 19 13 20 clf.fit(X_train, y_train) 14 15TypeError: __init__() missing 1 required positional argument: 'base_estimator' 16
該当のソースコード
colab
1import pandas as pd 2from sklearn.model_selection import train_test_split 3from sklearn.metrics import accuracy_score 4import warnings 5from sklearn.utils.testing import all_estimators 6 7import urllib.request as req 8url = "https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv" 9savefile = "iris.csv" 10req.urlretrieve(url, savefile) 11iris_data = pd.read_csv(savefile, encoding="utf-8") 12 13y = iris_data.loc[:,"Name"] 14x = iris_data.loc[:,["SepalLength", "SepalWidth", "PetalLength", "PetalWidth"]] 15y 16 17x_train, x_test, y_train, y_test = train_test_split(x,y,test_size = 0.2, train_size = 0.8, shuffle = True) 18 19warnings.filterwarnings('ignore') 20allAlgorithms = all_estimators(type_filter="classifier") 21 22for (name, algorithm) in allAlgorithms: 23 clf = algorithm() 24 25 clf.fit(x_train, y_train) 26 27 y_pred = clf.predict(x_test) 28 29 print(name,"の正解率=", accuracy_score(y_test, y_pred))
jupiternotebook
1import pandas as pd 2from sklearn.model_selection import train_test_split 3from sklearn.metrics import accuracy_score 4from sklearn.utils.testing import all_estimators 5from sklearn.datasets import load_iris 6import warnings 7warnings.filterwarnings('ignore') 8iris = load_iris() 9X = iris.data 10y = iris.target 11 12X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False) 13 14 15#最適なモデルを選ぶ 16all_estimators() 17allAlgorithms = all_estimators(type_filter="classifier") 18for (name, algorithm) in allAlgorithms: 19 clf = algorithm() 20 21 clf.fit(X_train, y_train) 22 23 y_pred = clf.predict(X_test) 24 25 print(name,"の正解率=", accuracy_score(y_test, y_pred)) 26
###試したこと
該当部分をいかに変更しました。これにより、エラー無視で処理が行なえます。
for (name, algorithm) in allAlgorithms: try: clf = algorithm() clf.fit(x_train, y_train) y_pred = clf.predict(x_test) print(name,"の正解率=", accuracy_score(y_test, y_pred)) except: pass
その結果が、以下となります。
AdaBoostClassifier の正解率= 0.7666666666666667 BaggingClassifier の正解率= 0.9666666666666667 BernoulliNB の正解率= 0.3 CalibratedClassifierCV の正解率= 0.9 CategoricalNB の正解率= 1.0 ComplementNB の正解率= 0.6666666666666666 DecisionTreeClassifier の正解率= 0.8666666666666667 DummyClassifier の正解率= 0.36666666666666664 ExtraTreeClassifier の正解率= 0.8333333333333334 ExtraTreesClassifier の正解率= 0.9666666666666667 GaussianNB の正解率= 0.9666666666666667 GaussianProcessClassifier の正解率= 1.0 GradientBoostingClassifier の正解率= 0.9666666666666667 HistGradientBoostingClassifier の正解率= 0.8666666666666667 KNeighborsClassifier の正解率= 1.0 LabelPropagation の正解率= 1.0 LabelSpreading の正解率= 1.0 LinearDiscriminantAnalysis の正解率= 1.0 LinearSVC の正解率= 0.9333333333333333 LogisticRegression の正解率= 1.0 LogisticRegressionCV の正解率= 1.0 MLPClassifier の正解率= 1.0 MultinomialNB の正解率= 0.9666666666666667 NearestCentroid の正解率= 1.0 NuSVC の正解率= 1.0 PassiveAggressiveClassifier の正解率= 0.8666666666666667 Perceptron の正解率= 0.6666666666666666 QuadraticDiscriminantAnalysis の正解率= 1.0 RadiusNeighborsClassifier の正解率= 1.0 RandomForestClassifier の正解率= 0.9333333333333333 RidgeClassifier の正解率= 0.8666666666666667 RidgeClassifierCV の正解率= 0.8666666666666667 SGDClassifier の正解率= 0.6666666666666666 SVC の正解率= 1.0
見た感じ、書籍や参考URLからClassfierの件数が多くなっていることがわかります。例えば、CategoricalNB など。
これは、
all_estimators(type_filter="classifier")
のclasssfierでフィルタされる、そもそものアルゴリズムが増えたという認識であっているでしょうか?
それとも、フィルタが間違っていたのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/11 12:51