1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kaggle入門Advent Calendar 2024

Day 4

【kaggle】機械学習イントロ - 初めての機械学習モデル【備忘翻訳】

Last updated at Posted at 2024-12-03

はじめに

当記事はkaggleのLearnのIntro to Machine LearningYour First Machine Learning Modelを翻訳して備忘としたものです。
拙い英語力なので間違い等あればご指摘いただけたらと思います。

まとめ:【kaggle】翻訳記事まとめ【備忘翻訳】
【前】:【kaggle】機械学習イントロ - 基本的なデータ探索【備忘翻訳】
【次】:【kaggle】機械学習イントロ - モデルの検証【備忘翻訳】

当記事に含まれるコードはkaggle内のnotebook内で正常に動作します。動作を試したい場合はkaggleのnotebookで試してください。


初めての機械学習モデル

モデリングのためのデータ選択

データセットには変数が多すぎて把握するのが難しく、綺麗に出力することさえ難しいです。この膨大なデータを理解できるまで、削減するにはどのようなことができるでしょうか?

まず、直感的に選んだいくつかの変数を使ってみます。後のコースでは変数を自動的に優先順位付けする統計手法を紹介します。

変数/列を選択するには、データセット内の全ての列のリストを確認する必要があります。DataFrameのcolumnsプロパティを使用することで確認できます。(以下のコードの1番下の行を参照)

import pandas as pd

melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
melbourne_data.columns
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',
       'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',
       'Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude',
       'Longtitude', 'Regionname', 'Propertycount'],
      dtype='object')
# The Melbourne data has some missing values (some houses for which some variables weren't recorded.)
# メルボルンのデータにはいくつか欠損値があります(いくつかの変数が記録されなかった家もあります)
# We'll learn to handle missing values in a later tutorial.  
# 欠損値の処理方法については、後のチュートリアルで学習します。
# Your Iowa data doesn't have missing values in the columns you use.
# アイオワ州のデータ(kaggleでハンズオン学習するデータ)では欠損値はありません。
# So we will take the simplest option for now, and drop houses from our data. 
# そのため、今は単純な処理によって欠損値を削除します。
# Don't worry about this much for now, though the code is:
# コードは以下の通りです

# dropna drops missing values (think of na as "not available")
# 欠損値を削除します(na は「利用不可」と考えてください)
melbourne_data = melbourne_data.dropna(axis=0)

データのサブセットを選択する方法はたくさんあります。Pandasコースでは深堀していますが、ここでは2つのアプローチに焦点を当てていきます。

  1. 「予測対象」を選択するためのドット記法
  2. 「特徴量」を選択するために、列リストでの選択

個人的な理解です。「サブセットを選択する」とは予測したい値を指定すること(1)と、その予測するために必要なデータを選択する(2)ことだと考えています。

予測対象の選択

ドット記法を利用して変数を取り出すことができます。この単一の列はSeriesに格納され、これはデータの列が一つだけのDataFrameに似ています。

ドット記法を使用して予測する列(予測ターゲットと呼ばれる)を選択します。慣例により、予測対象はyと呼ばれます。したがって、メルボルンのデータの住宅価格を保存するために必要なコードは以下の通りです。

y = melbourne_data.Price

「特徴量」を選ぶ

モデルに入力され、後に予測を行うために使用される列は「特徴量」と呼ばれます。今回の場合は、住宅価格を決定するために使用される列のことを指します。予測目的の列以外の全ての列を特徴量として使用する場合もありますが、逆に特徴量が少ないほうが良い場合もあります。

今回はいくつかの特徴量のみで作成したモデルを構築します。後ほど、様々な特徴量で構築されたモデルを繰り返し比較する方法を説明します。

カッコ内に列名を列挙していき、複数の特徴量を選択します。各項目は文字列型(引用符号付)である必要があります。

例えば:

melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

慣例により、このデータはXと呼ばれます。

X = melbourne_data[melbourne_features]

describeメソッドとheadメソッドを用いて、住宅価格を予想するために使用するデータを簡単に確認してみましょう。

X.describe()
Rooms Bathroom Landsize Lattitude Longtitude
count 6196.000000 6196.000000 6196.000000 6196.000000
mean 2.931407 1.576340 471.006940 -37.807904
std 0.971079 0.711362 897.449881 0.075850
min 1.000000 1.000000 0.000000 -38.164920
25% 2.000000 1.000000 152.000000 -37.855438
50% 3.000000 1.000000 373.000000 -37.802250
75% 4.000000 2.000000 628.000000 -37.758200
max 8.000000 8.000000 37000.000000 -37.457090
X.head()
Rooms Bathroom Landsize Lattitude Longtitude
1 2 1.0 156.0 -37.8079
2 3 2.0 134.0 -37.8093
4 4 1.0 120.0 -37.8072
6 3 2.0 245.0 -37.8024
7 2 1.0 256.0 -37.8060

これらのコマンドを利用して視覚的にデータをチェックすることはデータサイエンスの仕事の中でも重要な部分です。データセットにはさらに詳しく調べるべき価値のある内容が頻繁に見つかります。


自分のモデルを作ろう!

モデルを作成するにはscikit-learnライブラリを使用します。サンプルコードにあるようにコーディング時にはこのライブラリはsklearnとして記述されます。scikit-learnはDataFrameのデータをモデル化するための最も人気のあるライブラリです。

モデルを構築して使用する手順は以下の通りです。

  • 定義(define):モデルの種類はどのようなものにしますか?決定木か?それとも他の種類のモデルか?モデルタイプによってパラメータも指定します。
  • 学習(fit):提供されたデータからパターンを取得します。これがモデリングの核心です。
  • 予測(predict):まさにそのまま予測します。
  • 評価(evalute):モデルの予測がどの程度正確であるかを判断します。

以下はScikit-learnを使用して、決定木モデルを定義し、それを特徴量で学習させる例です。

from sklearn.tree import DecisionTreeRegressor

# Define model. Specify a number for random_state to ensure same results each run
melbourne_model = DecisionTreeRegressor(random_state=1)

# Fit model
melbourne_model.fit(X, y)
console
DecisionTreeRegressor(random_state=1)

多くの機械学習モデルではモデルトレーニングにおいてある程度のランダム性が許容されています。random_stateに数値を指定すると、実行ごとに同じ結果が得られます。これは良い習慣だと考えられています。任意の数値を使用でき、モデルの品質には大きく影響されることはありません。

これで予測に使用するモデルができました。

実際は、すでに価格が分かっている住宅ではなく、市場に出回る前の新しい住宅について予測を立てることになるでしょう。ただし、予測関数がどのように機能するかを確認するために、トレーニングデータの最初の数行について予測を行います。

print("Making predictions for the following 5 houses:")
print(X.head())
print("The predictions are")
print(melbourne_model.predict(X.head()))
console
Making predictions for the following 5 houses:
   Rooms  Bathroom  Landsize  Lattitude  Longtitude
1      2       1.0     156.0   -37.8079    144.9934
2      3       2.0     134.0   -37.8093    144.9944
4      4       1.0     120.0   -37.8072    144.9941
6      3       2.0     245.0   -37.8024    144.9993
7      2       1.0     256.0   -37.8060    144.9954
The predictions are
[1035000. 1465000. 1600000. 1876000. 1636000.]
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?