sklearn 機械学習の使い方を 5 分で解説します (パート 1)

sklearn 機械学習の使い方を 5 分で解説します (パート 1)

[[205998]]

皆さんのお役に立てれば幸いですので、この投稿を書くのは大変でした。機械学習とデータマイニングの業界背景については紹介しませんし、ロジスティック回帰、SVM、GBDT、ニューラルネットワークなどの学習アルゴリズムの理論的根拠や数学的導出についても具体的に紹介しません。この記事は、機械学習とデータモデリングを手順的にすぐに始められるように支援することに重点を置いています。

この記事は主に 4 つの部分に分かれています (時間の制約により 2 つの部分に分けられます)。

前の:

  1. 準備の部分では、主に環境構築とパンダの基礎知識が必要になります。
  2. アプリケーションのセクションでは、Kaggle の Titanic を例に、データ ソースの取得、データのクリーニング、機能の処理、モデルの選択、モデルの出力、アプリケーションについて説明します。

次:

  1. 最適化の章では、いくつかの最適化手法を紹介します。
  2. この記事では、私が気になっているいくつかの疑問を提起し、皆さんの助けを得たいと思っています。

準備

1環境構築

sklearn の実験環境全体は、python 2.7 + pycharm + Anaconda です。

2 パンダの基礎

ここでは、これから使用するパンダの知識のみを紹介します。ご興味があれば、詳しく学んでみてください。参考書として「Python for Data Analysis」をお勧めします。基本的な理解がある方は、直接アプリケーションセクションに進んでください。

Pandas は主に Series と DataFrame という 2 つのデータ構造を使用します。 Series は 1 次元配列に似ていますが、DataFrame は 2 次元のテーブル構造に似ています。

シリーズ構成法:

  1. ラベル=[1,0,1,0,1]
  2. data = pd.Series(data=label、 index =[ 'a' 'b' 'c' 'd' 'e' ]、dtype= int name = "label" )
  3. 印刷データ

シリーズはインデックスによってデータを取得します

  1. データ[ 'a' ]  
  2. データ[[ 'a' , 'b' ]]

データフレームの構築

(1)辞書形式で構築

  1. frame = pd.DataFrame({ 'name' :[ 'Time' , 'Jack' , 'Lily' ], 'Age' :[20,30,12], "weight" :[56.7,64.0,50.0]})

(2) DataFrameからDataFrameを構築する

  1. frame1 = pd.DataFrame(frame,columns=[ "名前" , "年齢" ])

フレームから 2 つの列が読み取られ、新しい DataFrame が形成されます。

データフレーム操作

1 列を追加する

  1. フレーム1[ "friends_num" ]=[10,12,14]

2. 列を削除する

  1. frame2 = frame1.drop ([ "名前" , "年齢" ],axis=1 )

3 データ行を見つける

  1. フレーム1[フレーム1[ "friends_num" ]>10]

結果は次のとおりです。

DataFrame の統計手法

1 フレーム 1 の Age 列をセグメント化するなど、列を処理するために lambda を適用します。

  1. frame1[ "Age_group" ] = frame1[ "Age" ].apply(lambda x: x < 20 の場合は 0、それ以外の場合は1)

2 出力統計情報の説明、非常に強力

  1. フレーム1.記述()

データ処理に特に役立つ 8 つの統計が提供されます。問題があります。describe メソッドを直接使用すると、数値型の列しかカウントできず、文字変数はカウントできません。パラメータを追加するだけです。

  1. frame1.describe(include=[ 'O' ])

3. 欠損値の取り扱い

  1. #欠損値を0で埋める
  2. フレーム1.フィルナ(0)
  3. #NANを含む行を破棄する
  4. フレーム1.dropna()
  5. # すべてのnan行を削除
  6. frame1.dropna(how= "すべて" )

応用

1 データの読み取り

この例では、データ ソースとして Titanic を使用します。添付ファイルでデータを入手できます。

  1. データ = pd.DataFrame(pd.read_csv(train_path))
  2. data_test = pd.DataFrame(pd.read_csv(test_path))
  3. data_test = data_test[[ "Pclass" , "名前" , "性別" , "年齢" , "同胞" , "座席" , "チケット" , "運賃" , "客室" , "搭乗" ]]
  4. x = data[[ "Pclass" , "Name" , "Sex" , "Age" , "SibSp" , "Parch" , "Ticket" , "Fare" , "Cabin" , "Embarked" ]]
  5. y = data[[ "生き残った" ]]
  6. x.describe() を印刷する
  7. x.describe(include=[ 'O' ])を印刷します。
  8. data_test.describe() を印刷する
  9. data_test.describe(include=[ 'O' ])を印刷します。

データの初期統計:

2 データクリーニング

1. 欠損値の処理。

Age 列と Embarked 列には欠損値がいくつかありますが、これらは別々に処理されます。

  1. #欠損値をモードで埋める
  2. data_set[ "乗船" ]=data_set[ "乗船" ].fillna( 'S' )
  3. #年齢の欠損値を平均値で埋める
  4. data_set[ "年齢" ]=data_set[ "年齢" ].fillna(data_set[ "年齢" ].mean())

2. 欠損率の高い列を削除する(初期処理時)

Cabin列の欠落率が75%に達したため、列を削除します。

  1. data_set = data_set.drop ([ "キャビン" ], axis=1 )

3 特徴処理

特徴処理は特定のデータに基づいて行われるため、特徴処理の前にデータを完全に理解しておく必要があります。特徴処理には決まった方法はありません。主に個人の経験と観察に依存しており、継続的な試行錯誤を通じて、より良い特徴変数を発見したいと考えています。したがって、特徴処理はモデル構築プロセスの中で最も時間がかかり、精神的に疲れるタスクです。

1) 単変量特徴抽出。

  1. #名前の長さに基づいて、name_len機能を抽象化します
  2. data_set[ "name_len" ] = data_set[ "Name" ].apply(len)

名前の列を観察する

名前列のデータを観察すると、名前に性別や婚姻状況を含むタイトル情報が見つかります。この情報を抽出します(便利な機能になる可能性があります)。

  1. data_set[ "name_class" ] = data_set[ "Name" ].apply(lambda x : x.split( "," )[1]).apply(lambda x :x.split()[0])

2) 複数の変数の組み合わせ

兄弟姉妹と配偶者の数を表す

パーチは親と子の数を表す

したがって、sibsp と parch を組み合わせると、家族のメンバーの数を取得できます。

  1. データセット[ "family_num" ] = データセット[ "Parch" ] + データセット[ "SibSp" ] +1

3) 名目変数を数値変数に変換する

  1. #乗り出した
  2. data_set[ "Embarked" ]=data_set[ "Embarked" ].map({ 'S' :1, 'C' :2, 'Q' :3}).astype( int )
  3. #セックス
  4. data_set[ "性別" ] = data_set[ "性別" ].apply(lambda x : 0 if x == '男性'  それ以外の場合1)

4) データのセグメンテーション

統計と経験に基づくセグメンテーション

  1. #[7.91,14.45,31.0] 運賃統計に基づくセグメンテーション
  2. data_set[ "運賃" ] = data_set[ "運賃" ].apply(lambda x:cutFeature([7.91,14.45,31.0],x))
  3. #[18,48,64] 経験に基づくセグメンテーション
  4. data_set[ "年齢" ] = data_set[ "年齢" ].apply(lambda x:cutFeature([18,48,64],x))

簡単なデータ処理の後、次の 12 次元データが得られます。

4 モデルの選択とテスト

最初に 5 つのモデルがテスト用に選択されました。

ランダムフォレスト分類子

エクストラツリー分類子

アダブースト分類器

勾配ブースティング分類器

SVC

モデルパラメータ:

  1. # ランダムフォレスト
  2. rf_params = {
  3. 'n_jobs' : -1,
  4. 'n_estimators' : 500,
  5. 'warm_start' : True
  6. # '最大機能' : 0.2,
  7. '最大深度' :6,
  8. '最小サンプル数' : 2,
  9. '最大特徴' : '平方根' ,
  10. '詳細' : 0
  11. }
  12. # 追加ツリー ランダムフォレスト
  13. et_params = {
  14. 'n_jobs' : -1,
  15. 'n_estimators' : 500,
  16. # '最大機能' : 0.5,
  17. '最大深度' : 8,
  18. '最小サンプル数' : 2,
  19. '詳細' : 0
  20. }
  21.  
  22. # アダブースト
  23. ada_params = {
  24. 'n_estimators' : 500,
  25. 学習率: 0.75
  26. }
  27.  
  28. #GBDT
  29. gb_params = {
  30. 'n_estimators' : 500,
  31. # '最大機能' : 0.2,
  32. '最大深度' : 5,
  33. '最小サンプル数' : 2,
  34. '詳細' : 0
  35. }
  36.  
  37. # エスビーシー
  38. svc_params = {
  39. 「カーネル」 : 「線形」
  40. 'C' : 0.025
  41. }

モデル選択コード:

  1. 分類子 = [
  2. ( "rf_model" 、 RandomForestClassifier(**rf_params))、
  3. ( "et_model" 、ExtraTreesClassifier(**et_params))、
  4. ( "ada_model" 、AdaBoostClassifier(**ada_params))、
  5. ( "gb_model" 、 GradientBoostingClassifier(**gb_params))、
  6. ( "svc_model" 、SVC(**svc_params))、
  7. ]
  8.  
  9. ホールドアウト = [0.95, 0.90, 0.75, 0.50, 0.01]
  10. ラウンド = 20
  11. xx = 1. - np.array(heldout)
  12. のために 分類子name 、 clf :
  13. print( "トレーニング %s" % name )
  14. rng = np.random.RandomState(42)
  15. yy = []
  16. heldoutiの場合:
  17. yy_ = []
  18. r範囲(ラウンド)内である場合:
  19. X_train_turn、X_test_turn、y_train_turn、y_test_turn = \
  20. train_test_split(x_train、labels_train、テストサイズ=i、ランダム状態=rng)
  21. clf.fit(X_train_turn、y_train_turn) を使います。
  22. y_pred = clf.predict(X_test_turn)
  23. yy_.append(1 - np.mean(y_pred == y_test_turn))
  24. yy.append(np.mean(yy_))
  25. plt.plot(xx, yy, ラベル=名前)
  26.  
  27. plt.legend(loc= "右上" )
  28. plt.xlabel( "比例列車" )
  29. plt.ylabel( "テストエラー率" )
  30. plt.show()

選考結果は以下の通りです。

上の図からわかるように、randomForest は一般に他のアルゴリズムよりもパフォーマンスが優れています。最初はランダムフォレスト アルゴリズムが選択されます。

トレーニング セットにおけるモデルのパフォーマンス:

  1. モデルスコアを定義します(x_train、labels_train、x_test、y_test、モデル名、et_params):
  2. print( "--------%s-------------" )%(モデル名)
  3. モデル = モデル名(**et_params)
  4.  
  5. モデルをフィット(x_train、labels_train)
  6. 「feature_importances_」の場合  dir (モデル):
  7. model.feature_importances_ を印刷する
  8.  
  9. 分類レポートを印刷する(
  10. ラベル_train、
  11. モデルを予測する(x_train)
  12.  
  13. 分類レポートを印刷する(
  14. y_テスト、
  15. モデルを予測する(x_test)
  16. リターンモデル
  17.  
  18. モデルスコア(x_train、labels_train、x_test、y_test、RandomForestClassifier、rf_params)

トレーニング セットの混同行列は次のとおりです。

テスト セットの混同行列は次のとおりです。

この時点で、テスト セットでの精度が 83% の予備学習モデルが確立されました。時間の制約により、最適化と思考のセクションは次の記事で共有される予定ですので、お楽しみに。

オリジナルリンク: https://cloud.tencent.com/community/article/229506

著者: 趙成龍

[この記事は51CTOコラムニスト「テンセントクラウドテクノロジーコミュニティ」によるオリジナル記事です。転載の許可を得るには51CTOを通じて原作者に連絡してください]

この著者の他の記事を読むにはここをクリックしてください

<<:  ビッグデータに圧倒された米国の諜報機関は人工知能に期待をかけている

>>:  アリババのナレッジグラフが完全公開、最先端の人工知能技術が雲奇カンファレンスで輝く

ブログ    
ブログ    
ブログ    

推薦する

...

アリババクラウドは、70億のパラメータを持つTongyi Qianwen大規模モデルをオープンソース化し、無料で商用利用可能に

大規模モデルの開発動向はオープンソースへと移行し始めています。周知のとおり、ChatGPT、GPT-...

...

[オピニオン] アルゴリズムとテクノロジーが成熟すれば、新しい小売業は本当に素晴らしい時代を迎えることになる

2007年、サンフランシスコのモスコーニセンターで開催されたMacWorldカンファレンスで、スティ...

データマイニングコンテストのルーチンとディープラーニングの限界について話す

序文ちょうど夏休み中に、KaggleのZillow Prizeコンペに参加し、データマイニングと機械...

...

アルゴリズム モデルをエンドツーエンドのインテリジェント モデルに変換するにはどうすればよいでしょうか?

エッジ インテリジェント テクノロジーのエンジニアリング プラクティスを紹介する前に、避けることので...

携帯電話の顔認識は本当に安全ですか?

​​​ [51CTO.com クイック翻訳]顔認識は、セキュリティメカニズムとして、ますます多くの携...

GitHub CEO: AIはプログラマーに取って代わることはできない

GitHub の CEO である Thomas Dohmke 氏は最近、人工知能とソフトウェア開発の...

欧州の複数の企業が、産業の発展を制限するEUのAI法案を批判する公開書簡に署名した。

欧州議会は7月4日、6月14日に人工知能法案草案を可決した。これは、欧州企業が立ち上げたAIモデルを...

ガートナー、2023年の中国のデータ分析と人工知能技術の成熟度曲線を発表

ガートナーは、2026年までに中国のホワイトカラー職の30%以上が再定義され、生成AIを活用し管理す...

PaddlePaddle ディープラーニング実践 - 英語-フランス語翻訳マシン

自然言語処理[1]は、コンピュータサイエンスと人工知能の分野におけるもう一つの重要な方向性です。重要...

ロボット工学が産業界のデジタル革命を推進

近年、自動化プロセスの導入は世界中で加速しています。生産効率の大幅な向上により、低技能労働者の代わり...

...

女神があなたを好きかどうか知りたいなら、AI マシンであなたの顔をスキャンするだけです。

[[281019]]この記事はLeiphone.comから転載したものです。転載する場合は、Lei...