blog

ソフトウェア開発|人工知能チュートリアル:Kerasと最初のデータセット

この記事では、引き続き確率論について学びます。...

Oct 11, 2025 · 9 min. read
シェア

この論文では、確率論の研究を続けます。

連載では、Anacondaの使い方を学び、確率論の知識を強化しました。今回は、引き続き確率論について学び、データ可視化のためのseabornとPandasの使い方を学び、さらにTensorFlowとKerasの使い方を紹介します。

まずは、人工知能と機械学習の理論的知識を深めることから始めましょう。ご存知のように、人工知能、機械学習、データサイエンス、ディープラーニングなどは、今日のコンピュータサイエンスのホットトピックです。しかし、コンピュータ・サイエンスには、他にもホットなトピックがあります。では、人工知能分野の発展はこれらの技術に良い影響を与えるのでしょうか?

まずはブロックチェーンについて。ウィキペディアの定義によると、"ブロックチェーンとは、暗号技術を用いて安全に結びつけられた、増え続ける記録からなる分散型台帳である "とのことです。一見すると、AIとブロックチェーンは急ピッチで発展している2つの別々の技術のように見えます。しかし、意外にもそうではありません。ブロックチェーン関連の専門用語は「」で、AI関連の専門用語は「データ」。大量のデータがAIプログラムに与えられ、処理されます。これらのアプリケーションは素晴らしい結果をもたらしますが、どのように信頼できるのでしょうか?そのため、説明可能なAIの必要性が高まっています。説明可能なAIは、エンドユーザーがAIプログラムが提供する結果を信頼できるよう、一定の保証を提供することができます。多くの専門家は、ブロックチェーン技術を利用することで、AIソフトウェアによる判断の信頼性を高めることができると考えています。一方、AIの検証から利益を得ることもできます。基本的に、スマートコントラクトとAIは通常、意思決定を行います。したがって、AIの進歩はブロックチェーン技術に良い影響を与え、逆もまた然りです。

以下、AIとIoTの影響について説明します。以前のIoTデバイスは通常、強力な処理能力やバッテリーのバックアップを持っていませんでした。そのため、多くの処理能力を必要とする機械学習用のソフトウェアをIoTデバイスに導入することは不可能でした。当時、ほとんどのIoTデバイスに導入されていたのは、ルールベースのAIソフトウェアだけでした。ルールベースのAIの利点は、シンプルで比較的少ない処理能力で済むことです。今日のIoTデバイスは処理能力が向上し、より強力な機械学習ソフトウェアを実行できるようになりました。テスラが開発した先進運転支援システムは、IoTとAIの融合の一例です。人工知能とIoTはお互いの発展に良い影響を与えています。

最後に、AIと量子コンピューティングの関係について説明しましょう。まだ発展途上ではありますが、量子コンピューティングは非常に重要なトピックの一つです。量子機械学習は、量子データと量子古典ハイブリッドモデルという2つのコンセプトに基づいています。量子データとは、量子コンピュータによって生成されたデータで、量子コンピューティングモデルのシミュレーションに使用されます。TensorFlow Quantumは、量子-古典ハイブリッド機械学習のための強力なツールです。このようなツールの存在は、量子コンピューティングに基づくAIソリューションが近い将来ますます利用可能になることを示唆しています。

seaborn

seabornはMatplotlibをベースにしたデータ可視化のためのPythonライブラリです。seabornはAnaconda Navigatorから簡単にインストールできます。seabornはAnaconda Navigatorから簡単にインストールできます。 ESPNcricinfoのウェブサイトにあるT20クリケットの国際試合の打撃記録を使って、T20.csvというCSV()ファイルを作りました。ラン、アベレージ、直面したボール、バッティングアベレージ、パーセンテージ、フィフティ、ゼロ、フォー、シックス。図1は、Pandasライブラリを使用してこのCSVファイルを読み込むコードです。Pandasは以前に紹介しました。

以下は、プログラムのコードが何を行っているかを一行ずつ説明したものです。1行目と2行目はPandasとseabornパッケージをインポートします。3行目はJupyterLabの作業ディレクトリからT20.csvファイルを読み込みます。4行目はメタデータとデータの1行目を表示します。図1はこのデータ行を示しており、T20国際クリケットで最高得点を記録したVirat Kohliの打撃記録を示しています。5行目は、T20.csvのメタデータと最初の5行のデータをBest5.csvに保存します。このファイルは、この行が実行されるとJupyterLabの作業ディレクトリに作成されます。6行目は、CSVファイルを列のパーセンテージに基づいて昇順にソートし、センチュリースコア上位10人の詳細をHighest100.csvに格納します。このファイルもJupyterLabの作業ディレクトリに保存されます。最後に、コードの7行目で5列目と7列目からデータ情報を抽出し、散布図を生成します。図2はプログラムが実行され生成された散布図です。

プログラムの最後に以下のコードを追加し、もう一度実行してください。

  1. sns.kdeplot(data=df.iloc[:, [5, 7]].head(50), x=アヴェ, y=ラン')

このコード行は、5列目と7列目のデータをプロットするためにkdeplot()関数を呼び出しています。 KDEプロットは、連続またはノンパラメトリックなデータ変数の確率密度関数を表現することができます。この定義では、kdeploy()関数が実際に何をするのか分からないかもしれません。図3は、1つのイメージ上のKDEプロットと散布図です。ご覧のように、散布図でプロットされたデータ点は、KDEプロットによってクラスタにグループ化されています。図1のプログラムの7行目を以下の各コード行に置き換えて再度プログラムを実行すると、異なるスタイルのプロット表示が表示されます。seabornが提供する他のプロット機能を調べ、あなたのニーズに最も適したものを選んでください。

  1. sns.histplot(data=df.iloc[:, [5, 7]].head(50), x=アヴェ, y=ラン')
  2. sns.rugplot(data=df.iloc[:, [5, 7]].head(50), x=アヴェ, y=ラン')

その他の確率論

このシリーズの記事で、正規分布が現実的なシナリオをモデル化するのに使えることがわかりました。しかし、正規分布は数ある重要な確率分布の1つに過ぎません。図4の手順は、3つの確率分布をプロットしたものです。

手順を説明しましょう。1行目はNumPyのrandomモジュールをインポートしています。 2行目と3行目はプロット用にMatplotlibとseabornをインポートしています。2行目と3行目はプロット用にMatplotlibとseabornをインポートし、5行目はパラメータnとpでデータを生成しています。

二項分布は、一連のn個の独立した実験における成功の数を与える離散確率分布です。3番目のパラメータ size は、出力の形状を決定します。6行目は、生成されたデータのヒストグラムをプロットしています。パラメータkde=TrueによりKDEもプロットされます。3番目のパラメータcolor='r'は、プロットに赤を使用することを示します。7行目はポアソン分布を生成しています。ポアソン分布は、二項分布の極限を与える離散確率分布です。パラメータlamは、一定の時間間隔で予想される事象が発生する回数を示します。ここでパラメータ・サイズは出力の形状も決定します。8行目は、生成されたデータを緑のヒストグラムとしてプロットします。行9は、サイズ1000の指数分布を生成します。10行目は、生成されたデータを青のヒストグラムとしてプロットします。NumPyのrandomモジュールには、ディリクレ分布、ガンマ分布、幾何分布、ラプラス分布など、他にも多くの確率分布が用意されています。これらを学び、使いこなすことは十分に価値があるでしょう。

では、線形回帰を学びましょう。線形回帰分析を使うと、ある変数に基づいてその変数の値を予測できます。線形回帰の重要な応用は、データの適合です。線形回帰が重要なのは、それが単純だからです。機械学習における教師あり学習のパラダイムは、実は回帰モデリングです。したがって、線形回帰は重要な機械学習戦略と考えることができます。この学習パラダイムは、統計学者によってしばしば統計的学習と呼ばれます。NumPyとSciPyは線形回帰のための関数を提供しています。以下に NumPy と SciPy を使った線形回帰の例を示します。

図 6 は NumPy を使った線形回帰の手順を示しています。1 行目と 2 行目は NumPy と Matplotlib をインポートし、4 行目と 5 行目は変数 a と b を初期化し、6 行目は関数 linspace() を使って 0 から 1 までの等間隔に 100 個の数値を生成します。関数 randn() は、配列 y の値を標準の関数として返します。randn()関数は、標準正規分布からのデータを返します。8行目は、配列 x と y の値を散布図としてプロットし、100個のデータ点を赤でマークします。9行目は、polyfit()と呼ばれる線形回帰手法を実行します。polyfit()関数の入力引数は、配列xとy、そしてフィッティングする多項式の次数を示す第3引数からなります。関数の戻り値は多項式の係数で、コード中の配列pに格納されています。10行目は関数polyval()を使って多項式を評価し、その値を配列y_lに格納します。11行目は、フィッティングされた直線を青でプロットします。最後に、12行目はすべてのイメージを表示します。この回帰直線は、可能性のある(x, y)データのペアを予測するのに使うことができます。

図8は、SciPyを使った線形回帰のプログラムコードです。

このプログラムがどのように動くか説明しましょう。1行目と2行目はNumPyとMatplotlibのライブラリをインポートし、3行目はSciPyライブラリのstatsモジュールをインポートしています。4行目から8行目は、前のプログラムと同様のタスクを実行します。9行目は、SciPyのstatsモジュールのlinregression()関数を使用して、2組の測定値(この場合は配列xとyの値)の線形最小二乗回帰を計算します。関数の戻り値の値mとcは、それぞれ回帰直線のandを表します。行10は、傾きと切片の値を用いて回帰直線を生成します。線11は、回帰直線を緑色でプロットします。最後に、12行目は、データ点を黄色、回帰直線を緑色にして、すべてのイメージを表示します。

このシリーズの前回の記事では、確率と統計の概念について学びました。網羅的とは言えませんが、これで基礎は固まったと思いますので、次は同様に重要な他の問題に目を向けてみましょう。

Keras

Kerasは一般的にTensorFlowと一緒に使われます。したがって、TensorFlowを使うことから始めましょう。図10に示すプログラムは4行のコードしかありませんが、このシリーズの最初のニューラルネットワークを構築します。その仕組みは次のとおりです。1行目でTensorFlowライブラリをインポートし、2行目でxというテンソルを作成します。3行目と4行目は、それぞれテンソルxにReLU()とLeaky ReLU活性化関数を適用します。ニューラルネットワークでは、活性化関数は入力からノードの出力を計算するルールを定義します。ReLU活性化関数はRelu(x) = max(0,x)と定義されます。3行目のコードの出力を図10に示します。ReLU活性化関数を適用した後、テンソルxの負の値がゼロに置き換えられていることがわかります。 Leaky ReLUはReLU活性化関数の改良版です。図10のコードの4行目の出力は、Leaky ReLU活性化関数が正の値を完全に保持し、負の値の20%を保持していることを示しています。Kerasについては後ほど、ニューラルネットワークと活性化関数についてさらに学びながら説明を続けます。

プログラムの動作は以下の通りです。1行目はKerasをインポートします。 2行目はKerasから6万個のトレーニングサンプルと1万個のテストサンプルを含む手書き数字データセットMNISTをインポートします。3行目はMatplotlibをインポートします。 5行目はMNISTデータセットをロードします。6行目から9行目は、トレーニングセットとテストセットの次元と次元数を表示します。図12は、これらのコードの出力を示しています。見てわかるように、トレーニングセットもテストセットも3次元で、すべてのデータサンプルの解像度は28×28です。 10行目は1234番目のトレーニングイメージをロードします。11行目と12行目はこのイメージを表示します。図12からわかるように、これは数字の3の手書きイメージです。

を経由して

Read next