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

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

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

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

機械学習

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1194閲覧

Kaggle 提出の仕方 データの書き換え

Canchan

総合スコア2

Kaggle

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

機械学習

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/26 02:07

kaggleのHousepricesを利用しています
重回帰分析を利用してます。kaggleへ提出するのですが、このあとのプログラムが分からないので教えていただきたいです。
Python学習して数週間の初心者のため、
分かりやすく教えていただけたら幸いです。

該当のソースコード

# This Python 3 environment comes with many helpful analytics libraries installed # It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python # For example, here's several helpful packages to load import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) # Input data files are available in the read-only "../input/" directory # For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory import os for dirname, _, filenames in os.walk('/kaggle/input'): for filename in filenames: print(os.path.join(dirname, filename)) # You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using "Save & Run All" # You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session
#データ加工・処理・分析ライブラリ import numpy as np import numpy.random as random import scipy as sp import pandas as pd #可視化ライブラリ import matplotlib.pyplot as plt import matplotlib as mp1 import seaborn as sns %matplotlib inline #機械学習ライブラリ import sklearn import sklearn.preprocessing as pp import sklearn.model_selection as ms import sklearn.metrics as metrics import json from sklearn import linear_model from matplotlib import pyplot as plt from sklearn.metrics import mean_squared_error from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.pipeline import make_pipeline from sklearn.linear_model import ( LinearRegression, Ridge, Lasso ) #少数第3位まで表示 %precision 3
#データの読み込み train = pd.read_csv('../input/house-prices-advanced-regression-techniques/train.csv') #テストデータ test = pd.read_csv('../input/house-prices-advanced-regression-techniques/test.csv') #訓練データ alldata = pd.concat([train,test],axis=0).reset_index(drop=True) print("Train data shape:",train.shape) print("Test data shape:",test.shape)
#物件の広さを合計した変数を作成 train["TotalSF"] = train["GrLivArea"] + train["GarageArea"] + train["TotalBsmtSF"] + train["1stFlrSF"] + train["2ndFlrSF"] test["TotalSF"] = test["GrLivArea"] + test["GarageArea"] + test["TotalBsmtSF"]+test["1stFlrSF"] + test["2ndFlrSF"] #今回使うSalePriceとTotalSFのみのデータに置き換える train = train[["SalePrice","GrLivArea","GarageArea","TotalBsmtSF","1stFlrSF","2ndFlrSF"]]
#データ分割(訓練データとテストデータ)のためのインポート from sklearn.model_selection import train_test_split #重回帰のモデル構築のためのインポート from sklearn.linear_model import LinearRegression #目的変数にSalePriceを指定、説明変数にそれ以外を指定 X = train.drop("SalePrice",axis=1) y = train["SalePrice"] #訓練データとテストデータに分ける train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.5,random_state=0) train_X.head()
#重回帰クラスの初期化と学習 model = LinearRegression() model.fit(train_X,train_y) #決定係数を表示 print('決定係数(train):{:.3f}'.format(model.score(train_x,train_y))) print('決定係数(test):{:.3f}'.format(model.score(test_x,test_y))) #回帰係数と切片を表示 print('\n回帰係数\n{}'.format(pd.Series(model.coef_,index=X.columns))) print('切片:{:.3f}'.format(model.intercept_))

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず現状のコードですが、「テストデータ」はあくまでも test.csv から読み込んだデータですので、

Python

1#訓練データとテストデータに分ける 2train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.5,random_state=0)

の部分で訓練データから分割したデータは「テストデータ」ではなく「検証データ」(valification data) などとしておいたほうが混乱がなくてよいでしょうね。

ですので上記の箇所は

Python

1#訓練データと検証データに分ける 2train_X,val_X,train_y,val_y = train_test_split(X,y,test_size=0.5,random_state=0)

としておいたほうが良いかと思います。併せて

Python

1#決定係数を表示 2print('決定係数(train):{:.3f}'.format(model.score(train_X,train_y))) 3print('決定係数(test):{:.3f}'.format(model.score(test_X, test_y))) 4

の部分も書き換える必要があります。

あとは、訓練済みのモデルにテストデータを入れて予測するだけです。

Python

1# 元のテストデータ から test_X を生成 2test_X = test[["GrLivArea","GarageArea","TotalBsmtSF","1stFlrSF","2ndFlrSF"]] 3 4# test_X に nan があるので処理する(何かしらの値に変換する) 5# ここでは仮に 0 に変換しておきます。 6test_X = test_X.fillna(0) 7 8# test_y を予測する 9test_y = model.predict(test_X) 10 11# 元のテストデータに上記の結果を格納する 12test['SalePrice'] = model.predict(test_X) 13 14# 表示 15test.head()

結果が求まったら、

Python

1test[['Id', 'SalePrice']].to_csv('submission.csv', index=False)

のようにして、データより 'Id'列と'SalePrice'列のみの CSVファイルを書き出して提出するとよいと思います。

投稿2020/06/26 03:28

magichan

総合スコア15898

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

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

Canchan

2020/06/26 05:09

# test_y を予測する test_y = model.predict(test_X) の部分で以下のようなエラーが出ました matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 6 is different from 5)
magichan

2020/06/26 05:29

test_X は学習時(fit)の train_Xと同じ形式(列数が同じ)になっている必要があります。 train_X は train = train[["SalePrice","GrLivArea","GarageArea","TotalBsmtSF","1stFlrSF","2ndFlrSF"]] のあと、 X = train.drop("SalePrice",axis=1) にて 作られておりますので結果5列のデータ。 対して test_X は test_X = test[["GrLivArea","GarageArea","TotalBsmtSF","1stFlrSF","2ndFlrSF"] で作成しておりますので、同じ5列のデータなので、今回のエラーは起こりえません。
magichan

2020/06/26 05:32

にもかかわらず、エラーにて (size 6 is different from 5) と、6列のデータを・・と言っているので、学習時に質問に書かれたコードとは違い6列のデータを使ったのではないでしょうか?
Canchan

2020/06/26 05:50

解決しました。 ちなみに #今回使うSalePriceとTotalSFのみのデータに置き換える train = train[["SalePrice","GrLivArea","GarageArea","TotalBsmtSF","1stFlrSF","2ndFlrSF"]] これに"OverallQual"を足していたためエラーになっていました。 ちなみにこれを足した場合はどこを書き換えれば実行されますか?
magichan

2020/06/26 05:53

X_test もこれと同じ列の並び(ただし "SalePrice" は結果なのでのぞく)にするとよいだけなので test_X = test[["GrLivArea","GarageArea","TotalBsmtSF","1stFlrSF","2ndFlrSF","OverallQual"] (列の順番はそろえること) のようにするとよいのではないでしょうか
Canchan

2020/06/26 05:58

すべて解決しコミットできました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問