質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

2131閲覧

ボストン住宅価格:light gbmにカテゴリー変数を入れて使いたい

Dantesu

総合スコア8

Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2021/10/24 07:34

翔泳社の[Kaggle データ分析」に則り、ボストン住宅価格のAI構築でlight GBMを(カテゴリー変数を入れて)使いたいのですが、エラーが出てしまいます。タイプミスではないようなのですが、どこで間違えてしまっているのでしょうか?

Google Coraborately で進めています。

python

1#パッケージのインポート 2import pandas as pd 3import matplotlib.pyplot as plt 4%matplotlib inline 5import seaborn as sns 6import numpy as np 7import random 8from sklearn.preprocessing import LabelEncoder 9import lightgbm as lgb 10np.random.seed(1234) 11random.seed(1234) 12from sklearn.model_selection import KFold 13folds=3 14kf=KFold(n_splits=folds) 15from sklearn.metrics import mean_squared_error 16 17#データファイルの読み込み 18df_train=pd.read_csv('/content/drive/MyDrive/train_house.csv',encoding='cp932') 19df_test=pd.read_csv('/content/drive/MyDrive/test_house.csv',encoding='cp932') 20 21plt.style.use('ggplot') 22 23#データの確認 24df_train.shape 25df_train.dtypes 26df_train.head() 27df_train['MSZoning'].value_counts() 28all_df=pd.concat([df_train,df_test],sort=False).reset_index(drop=True) 29all_df['MSZoning'].value_counts() 30 31 32categolies=all_df.columns[all_df.dtypes=="object"] 33categolies 34for cat in categolies: 35 le=LabelEncoder() 36 print(cat) 37 38all_df[cat].fillna('missing',inplace=True) 39le=le.fit(all_df[cat]) 40all_df[cat]=le.transform(all_df[cat]) 41 42all_df[cat]=all_df[cat].astype('category') 43all_df[cat].dtypes 44 45 46train_df_le=all_df[~all_df['SalePrice'].isnull()] 47test_df_le=all_df[all_df['SalePrice'].isnull()] 48 49lgbm_params={ 50 'objective':'regression', 51 'random_seed':1234 52} 53train_x=train_df_le.drop(['SalePrice','Id'],axis=1) 54train_y=train_df_le['SalePrice'] 55 56 57 58models=[] 59rmses=[] 60oof=np.zeros(len(train_x)) 61 62for train_index,val_index in kf.split(train_x): 63 x_train =train_x.iloc[train_index] 64 x_valid =train_x.iloc[val_index] 65 y_train =train_y.iloc[train_index] 66 y_valid =train_y.iloc[val_index] 67 68 lgb_train=lgb.Dataset(x_train,y_train) 69 lgb_eval=lgb.Dataset(x_valid,y_valid,reference=lgb_train) 70 71#エラーの出る箇所# 72model_lgb=lgb.train(lgbm_params,lgb_train,valid_sets=lgb_eval,num_boost_round=100,early_stopping_rounds=20,verbose_eval=10) 73 74 y_pred=model_lgb.predict(x_valid,num_iteration=model_lgb.best_iteration) 75 tmp_rmse=np.sqrt(mean_squared_error(np.log(y_valid),np.log(y_pred))) 76 print(tmp_rmse) 77 78 models.append(model_lgb) 79 emse.append(tmp_rmse) 80 oof[val_index]=y_pred

#エラーの内容#
ValueError: DataFrame.dtypes for data must be int, float or bool.
Did not expect the data types in fields MSZoning, Street, Alley, LotShape, LandContour, Utilities, LotConfig, LandSlope, Neighborhood, Condition1, Condition2, BldgType, HouseStyle, RoofStyle, RoofMatl, Exterior1st, Exterior2nd, MasVnrType, ExterQual, ExterCond, Foundation, BsmtQual, BsmtCond, BsmtExposure, BsmtFinType1, BsmtFinType2, Heating, HeatingQC, CentralAir, Electrical, KitchenQual, Functional, FireplaceQu, GarageType, GarageFinish, GarageQual, GarageCond, PavedDrive, PoolQC, Fence, MiscFeature, SaleType

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toast-uz

2021/10/27 14:15 編集

データセットの入手方法を明示願います。kaggle内でさえ、boston housingでDatasetを検索すると、40種以上出てきますので。
Dantesu

2021/10/27 14:33

jbpb0様<<< ご指摘ありがとうございます。まだどこが原因か判明できずにいますが、お礼まで失礼します。
jbpb0

2021/10/28 03:27 編集

https://www.kaggle.com/mirandora/houseprices-tutorial-code の「2. Make baseline」の「カテゴリ変数を数値に変換」のちょっと下の「for cat in categories:」の付近のインデントと比べたら、下記のインデントが抜けてるのが分かると思うので、そこ直してください all_df[cat].fillna('missing',inplace=True) le=le.fit(all_df[cat]) all_df[cat]=le.transform(all_df[cat]) all_df[cat]=all_df[cat].astype('category') all_df[cat].dtypes
jbpb0

2021/10/28 03:31

上記が済んだら、次に、質問のコードの #エラーの出る箇所# model_lgb=lgb.train(... に該当するところを、 https://www.kaggle.com/mirandora/houseprices-tutorial-code と比べてみてください そうしたら、そこのインデントも抜けてるのが分かると思うので、そこ直してください
jbpb0

2021/10/28 03:34

上記も済んだら、質問のコードの下記を修正してください emse.append(tmp_rmse) ↓ rmses.append(tmp_rmse) ここまで全部直したら、動くはずです Google Colabで確認したら、動きました
jbpb0

2021/10/28 04:38 編集

> KaggleのHouse Prices - Advanced Regression Techniques です、 https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data https://www.kaggle.com/c/house-prices-advanced-regression-techniques/overview の「Acknowledgments」を見ると、そのデータは「Ames Housing dataset」で、「Boston Housing dataset」ではないみたいです > 翔泳社の[Kaggle データ分析」に則り、ボストン住宅価格のAI構築でlight GBMを(カテゴリー変数を入れて)使いたい その書籍に、そのデータが「ボストン住宅価格」だと書かれてるのですか?
Dantesu

2021/10/28 04:37

jbpb0様<<< ありがとうございます!そして、低レベルなミスにお付き合い頂き、申し訳ございません。 for の途中だったのに(私の誤読で)セルを分けてしまい、写経にもなっていませんでした。
guest

回答1

0

自己解決

質問への追記・修正の依頼の欄にjbpb0様からご回答を頂き、解決しました。お騒がせしました。

投稿2021/10/28 04:40

Dantesu

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問