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

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

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

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

Python 3.x

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

機械学習

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

解決済

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

Dantesu
Dantesu

総合スコア6

Kaggle

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

Python 3.x

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

機械学習

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

1回答

0評価

1クリップ

456閲覧

投稿2021/10/24 07:34

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

Google Coraborately で進めています。

python

#パッケージのインポート import pandas as pd import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns import numpy as np import random from sklearn.preprocessing import LabelEncoder import lightgbm as lgb np.random.seed(1234) random.seed(1234) from sklearn.model_selection import KFold folds=3 kf=KFold(n_splits=folds) from sklearn.metrics import mean_squared_error #データファイルの読み込み df_train=pd.read_csv('/content/drive/MyDrive/train_house.csv',encoding='cp932') df_test=pd.read_csv('/content/drive/MyDrive/test_house.csv',encoding='cp932') plt.style.use('ggplot') #データの確認 df_train.shape df_train.dtypes df_train.head() df_train['MSZoning'].value_counts() all_df=pd.concat([df_train,df_test],sort=False).reset_index(drop=True) all_df['MSZoning'].value_counts() categolies=all_df.columns[all_df.dtypes=="object"] categolies for cat in categolies: le=LabelEncoder() print(cat) 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 train_df_le=all_df[~all_df['SalePrice'].isnull()] test_df_le=all_df[all_df['SalePrice'].isnull()] lgbm_params={ 'objective':'regression', 'random_seed':1234 } train_x=train_df_le.drop(['SalePrice','Id'],axis=1) train_y=train_df_le['SalePrice'] models=[] rmses=[] oof=np.zeros(len(train_x)) for train_index,val_index in kf.split(train_x): x_train =train_x.iloc[train_index] x_valid =train_x.iloc[val_index] y_train =train_y.iloc[train_index] y_valid =train_y.iloc[val_index] lgb_train=lgb.Dataset(x_train,y_train) lgb_eval=lgb.Dataset(x_valid,y_valid,reference=lgb_train) #エラーの出る箇所# model_lgb=lgb.train(lgbm_params,lgb_train,valid_sets=lgb_eval,num_boost_round=100,early_stopping_rounds=20,verbose_eval=10) y_pred=model_lgb.predict(x_valid,num_iteration=model_lgb.best_iteration) tmp_rmse=np.sqrt(mean_squared_error(np.log(y_valid),np.log(y_pred))) print(tmp_rmse) models.append(model_lgb) emse.append(tmp_rmse) 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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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 の途中だったのに(私の誤読で)セルを分けてしまい、写経にもなっていませんでした。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Kaggle

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

Python 3.x

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

機械学習

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