データ サイエンスの第一歩。 タイタニック号

短い導入の言葉

何をどうすればよいのか、段階的な指示があれば、もっと多くのことができるようになると思います。私自身、人生の中で、どこから始めればよいのか理解するのが難しくて、何かを始められなかった瞬間を覚えています。おそらく、かつてインターネットで「データ サイエンス」という言葉を見て、自分はデータ サイエンスとは程遠く、これを行う人々はどこか別の世界にいると思ったことがあるかもしれません。いいえ、彼らはここにいます。そしておそらく、この分野の人々のおかげで、記事があなたのフィードに表示されました。この工芸に慣れるためのコースはたくさんありますが、ここでは最初の一歩を踏み出すお手伝いをします。

さて、準備はできていますか?ここで使用するのは Python 3 であるため、Python XNUMX の知識が必要になることをすぐに伝えておきます。また、事前に Jupyter Notebook にインストールするか、Google Colab の使用方法を確認することをお勧めします。

Шагпервый

データ サイエンスの第一歩。 タイタニック号

Kaggle は、この問題における重要なアシスタントです。原則的にはなくても問題ありませんが、これについては別の記事で説明します。これはデータ サイエンス コンテストを主催するプラットフォームです。このような各コンテストでは、初期段階で、さまざまな種類の問題を解決するための非現実的な量の経験、開発経験、そして現代では重要なチームでの作業経験を積むことになります。

そこからタスクを実行していきます。それは「タイタニック」と呼ばれています。条件は、各個人が生き残るかどうかを予測することです。一般的に、DS に関わる人のタスクは、データの収集、処理、モデルのトレーニング、予測などです。 kaggle では、データ収集段階をスキップすることができます。データはプラットフォーム上に表示されます。それらをダウンロードする必要があります。すぐに始められます。

これは次のようにして実行できます。

「データ」タブにはデータを含むファイルが含まれています

データ サイエンスの第一歩。 タイタニック号

データ サイエンスの第一歩。 タイタニック号

データをダウンロードし、Jupyter ノートブックを準備して...

Шагвторой

このデータをどのようにロードすればよいでしょうか?

まず、必要なライブラリをインポートしましょう。

import pandas as pd
import numpy as np

Pandas を使用すると、さらに処理するために .csv ファイルをダウンロードできます。

Numpy は、データテーブルを数値の行列として表すために必要です。
どうぞ。ファイル train.csv を取得してアップロードしましょう。

dataset = pd.read_csv('train.csv')

データセット変数を通じて train.csv データ選択を参照します。そこに何があるのか​​見てみましょう:

dataset.head()

データ サイエンスの第一歩。 タイタニック号

head() 関数を使用すると、データフレームの最初の数行を確認できます。

Survived 列はまさに私たちの結果であり、このデータフレームで既知です。タスクの質問では、test.csv データの Survived 列を予測する必要があります。このデータには、タイタニック号の他の乗客に関する情報が保存されていますが、問題を解決する私たちには結果がわかりません。

そこで、テーブルを依存データと独立データに分割しましょう。ここではすべてがシンプルです。依存データは、結果に含まれる独立データに依存するデータです。独立したデータは、結果に影響を与えるデータです。

たとえば、次のようなデータセットがあります。

「Vova はコンピューター サイエンスを教えました - いいえ。
Vova はコンピューター サイエンスで 2 を取得しました。」

コンピューター サイエンスの成績は、「Vova はコンピューター サイエンスを勉強しましたか?」という質問への答えによって決まります。明らかですか?先に進みましょう、もうゴールに近づいています!

独立データの従来の変数は X です。依存データの場合は y です。

次のことを行います。

X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]

それは何ですか?関数 iloc[:, 2: ] を使用して、Python に「変数 X の XNUMX 番目の列から始まるデータを確認したい」と指示します (カウントが XNUMX から始まることを条件として、XNUMX 番目の列を含みます)。 XNUMX 行目では、最初の列のデータを確認したいと述べています。

[ a:b, c:d ] は、括弧内で使用するものの構成です。変数を指定しない場合は、デフォルトとして保存されます。つまり、[:,: d] を指定すると、データフレーム内の d 番以降の列を除くすべての列が取得されます。変数 a と b は文字列を定義しますが、それらはすべて必要なので、これをデフォルトのままにします。

何が得られたか見てみましょう:

X.head()

データ サイエンスの第一歩。 タイタニック号

y.head()

データ サイエンスの第一歩。 タイタニック号

この小さなレッスンを単純化するために、特別な注意が必要な列、または生存性にまったく影響を与えない列を削除します。これらには str 型のデータが含まれます。

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)

素晴らしい!次のステップに進みましょう。

ステップ3

ここでは、このデータが結果にどのような影響を与えるかをマシンがよりよく理解できるように、データをエンコードする必要があります。ただし、すべてをエンコードするのではなく、残した str データのみをエンコードします。コラム「セックス」。どのようにコーディングしたいのでしょうか?人の性別に関するデータをベクトルとして表してみましょう: 10 - 男性、01 - 女性。

まず、テーブルを NumPy 行列に変換しましょう。

X = np.array(X)
y = np.array(y)

それでは見てみましょう:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X = np.array(ct.fit_transform(X))

sklearn ライブラリは、データ サイエンスで完全な作業を実行できるようにする非常に優れたライブラリです。興味深い機械学習モデルが多数含まれており、データの準備も可能です。

説明したように、OneHotEncoder を使用すると、その表現で人の性別をエンコードできるようになります。男性、女性の 2 つのクラスが作成されます。相手が男性の場合は「男性」欄に「1」、「女性」欄に「0」が記入されます。

OneHotEncoder() の後に [1] があります。これは、列番号 1 (ゼロから数えて) をエンコードすることを意味します。

素晴らしい。さらに前進しましょう!

原則として、これは一部のデータが空白のままになっている場合に発生します (つまり、数値ではなく NaN)。たとえば、名前、性別など、人に関する情報があります。しかし、彼の年齢に関する情報はありません。この場合、次の方法を適用します。すべての列の算術平均を見つけ、列にデータが欠落している場合は、空白を算術平均で埋めます。

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)

ここで、データが非常に大きい場合に状況が発生することを考慮してみましょう。一部のデータは間隔 [0:1] にありますが、一部のデータは数百、数千を超える場合があります。このようなばらつきを排除し、コンピューターの計算をより正確にするために、データをスキャンしてスケールします。すべての数字が XNUMX を超えないようにしてください。これを行うには、StandardScaler 関数を使用します。

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])

データは次のようになります。

データ サイエンスの第一歩。 タイタニック号

クラス。私たちはすでに目標に近づいています!

ステップ XNUMX

最初のモデルをトレーニングしましょう! sklearn ライブラリからは、膨大な数の興味深いものが見つかります。この問題に、Gradient Boosting Classifier モデルを適用しました。私たちのタスクは分類タスクであるため、分類子を使用します。予後は 1 (生存) または 0 (生存しなかった) に割り当てられる必要があります。

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)

fit 関数は Python に次のように指示します。モデルに X と y の間の依存関係を検索させます。

XNUMX 秒もかからずにモデルの準備が完了します。

データ サイエンスの第一歩。 タイタニック号

どうやって応用すればいいのでしょうか?それでは見てみましょう!

ステップXNUMX。結論

次に、予測を行う必要があるテスト データを含むテーブルをロードする必要があります。このテーブルを使用して、X に対して行ったのと同じアクションをすべて実行します。

X_test = pd.read_csv('test.csv', index_col=0)

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(count, inplace=True, axis=1)

X_test = np.array(X_test)

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])

では、モデルを適用してみましょう。

gbc_predict = gbc.predict(X_test)

全て。予測を立てました。次に、それを CSV に記録して Web サイトに送信する必要があります。

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')

準備ができて。各乗客の予測を含むファイルを受け取りました。残っているのは、これらのソリューションを Web サイトにアップロードし、予測の評価を取得することだけです。このような原始的な解決策は、一般の人々の正答率 74% を達成するだけでなく、データ サイエンスにもある程度の推進力を与えます。最も興味のある人は、いつでも私にプライベートメッセージを送って質問することができます。ありがとうございます!

出所: habr.com

コメントを追加します