新着記事一覧

IT・プログラミング Python

2024/4/21

【Python】Pythonでの自然言語処理(日本語)

こちらの記事では、自然言語処理についてまとめています。 Contents1 自然言語処理とは?2 自然言語処理の実装 自然言語処理とは? 自然言語とは、日本語や英語のような自然発生的に生まれた言語です。日常的に使用している自然言語について、言葉が持つ意味を解析し処理します。活用事例としては、チャットボット、音声認識AI、文字認識(手書き文字をカメラが認識し文字データへと変換する技術)、検索エンジン、翻訳、感情分析、文章要約などがあります。 文章の意味を機械に理解させるには、単語分割を行う必要があります。手 ...

続きを読む

IT・プログラミング Python

2024/4/8

【Python】統計学的モデル 時系列分析の実装

こちらの記事では、時系列分析の実装についてまとめています。 Contents1 時系列分析とは?2 定常性とは?3 時系列データの分析方法4 SARIMAモデルの実装 時系列分析とは? 時系列分析では、時間経過とともに変化する時系列データを扱います。時系列データの例としては、毎時間の気温、株価の推移等がこれにあたります。売上予測、来店者予測等、ビジネスにおいて重要な分析技術です。 時系列データには以下3種類があります。 1.トレンドデータの長期的な傾向。時間の経過とともに値が上昇・下降している時系列データ ...

続きを読む

IT・プログラミング Python

2024/4/1

【Python】主成分分析の実装

こちらの記事では、主成分分析を実装していきます。 Contents1 主成分分析とは2 主成分分析の手順について 主成分分析とは 主成分分析とは、次元削減を行う時によく使う手法です。例えば、いくつかの特徴量があるデータを2次元データに変換すると、できるだけ情報を保ったまま2軸での描画が可能になり、全てのデータを見やすく示すことができます。 主成分分析の実用例として、製品やサービスのスコアリングや比較(1次元に圧縮)、データの可視化(2,3次元に圧縮)、回帰分析の前処理などが挙げられます。 主成分分析の手順 ...

続きを読む

IT・プログラミング Python

2024/4/1

【Python】カーネル主成分分析の実装

こちらの記事では、カーネル主成分分析の手順についてまとめています。 Contents1 カーネル主成分分析とは2 カーネル主成分分析の実装 カーネル主成分分析とは 回帰分析等、機械学習の多くのアルゴリズムは線形分離できるデータが与えられることを前提としていますが、現実的には線形分離できないデータ、つまり非線形分離する必要があるデータがほとんどです。非線形分離する必要があるデータに対処できるのが、カーネル主成分分析(kernel PCA)です。 カーネル主成分分析ではN×M(データの数×特徴の種類)のデータ ...

続きを読む

IT・プログラミング Python

2024/3/29

【Python】機械学習(教師なし) クラスタリング DBSCANの実装

こちらの記事では、機械学習(教師なし)の非階層的クラスタリング DBSCAN法についてまとめていきます。 Contents1 クラスタリングとは2 DBSCANでの実装 クラスタリングとは データをクラスター(塊)に分割する操作のことです。クラスタリングの中でも階層的クラスタリングと、非階層的クラスタリングの2種に分けられています。 1.階層的クラスタリングデータの中から最も似ている組み合わせを探し出して、順番にクラスターにしていく方法です。最終的に全データをまとめるクラスターに行くつけば終了です。 2. ...

続きを読む

IT・プログラミング Python

2024/3/28

【Python】機械学習(教師なし) クラスタリング k-meansの実装

こちらの記事では、機械学習(教師なし)の非階層的クラスタリング k-means法についてまとめていきます。 Contents1 クラスタリングとは2 k-means法での実装 クラスタリングとは データをクラスター(塊)に分割する操作のことです。クラスタリングの中でも階層的クラスタリングと、非階層的クラスタリングの2種に分けられています。 1.階層的クラスタリングデータの中から最も似ている組み合わせを探し出して、順番にクラスターにしていく方法です。最終的に全データをまとめるクラスターに行くつけば終了です。 ...

続きを読む

IT・プログラミング Python

2024/3/28

【Python】機械学習のデータ前処理 外れ値の扱いについて

外れ値の処理についてまとめています。 Contents1 外れ値とは?2 外れ値の検知方法について 外れ値とは? 外れ値とは、他のデータと著しく乖離したデータのことを指します。データ内に外れ値が混在していると、分析結果に影響を及ぼしたり、機械学習モデルの学習過程で影響がでてしまい学習が進みにくくなる、などの影響が出てしまいます。 外れ値の検知方法について 外れ値の検知方法について、可視化、LOF(Local Outlier Factor )、Isolation Forestの3つの手法について紹 ...

続きを読む

IT・プログラミング Python

【Python】機械学習(教師あり)単回帰分析の実装

説明変数1つで目的変数を予測する単回帰分析を実装してみたいと思います。

※習初学者の勉強のアウトプットですので、もしコードや解釈に間違い等あればご指摘頂けますと幸いです。

単回帰分析とは

上述の通り、説明変数1つで目的変数を予測する線形回帰モデル。回帰モデルの基礎です。

単回帰分析の実装

今回はWebサイトの閲覧数と売上のサンプルデータを使用して、単回帰式で分析をしてみたいと思います。

#必要なライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.linear_model import LinearRegression

#csvファイルを読み込む
df = pd.read_csv("test.csv",encoding="shift-jis")
print(df.head())
df.shape()

#x, y にそれぞれ説明変数、目的変数を格納する
x = df["売上金額(JPY)"]/1000000 #単位が大きいので1000000で割っておく
y = df["Views"]

#単回帰分析を行う
model = LinearRegression()
model.fit(x.values.reshape(-1, 1), y)

#散布図を描画
plt.plot(x ,y ,"o")
plt.plot(x, model.predict(x.values.reshape(-1, 1)), linestyle="solid")
plt.xticks([50,70,90,110], fontsize=10)
plt.yticks([5000,7000,9000,11000,13000], fontsize=10)
plt.xlabel("Sales(M JPY)",fontsize=10)
plt.ylabel("View",fontsize=10)
plt.show()

#モデルの回帰変数
print('モデル関数の回帰変数 w1: %.3f' % model.coef_)

#モデルの切片
print('モデル関数の切片 w2: %.3f' % model.intercept_)

#モデルの回帰式
print("y= %.3fx + %.3f" %(model.coef_, model.intercept_))

#x,yの相関係数
print("相関係数: %.3f" % x.corr(y))

#モデルの決定係数R2
print("決定係数R2: %.3f" % model.score(x.values.reshape(-1, 1), y))

解説

#csvファイルを読み込む
df = pd.read_csv("test.csv",encoding="shift-jis")
print(df.head())
df.shape()

保存しているcsvファイルをpd.read_csv("ファイル名")で読み込みます。
読み込んだファイルは以下です。df.head()で最初5行を確認、df.shape()でデータの内容を確認。今回は24行×3列のデータを準備しています。

#x, y にそれぞれ説明変数、目的変数を格納する
x = df["売上金額(JPY)"]/1000000#単位が大きいので1000000で割っておく
y = df["Views"]

x、yにそれぞれ説明変数、目的変数を格納しています。x.head(),y.head()で中身を確認し、それぞれ、以下のように格納できています。

こちらはyの中身です。

#単回帰分析を行う
model = LinearRegression()
model.fit(x.values.reshape(-1, 1), y)

LinearRegression()で単回帰モデルを呼び出し、model.fit(訓練データX, 訓練データy)で線形回帰モデルを当てはめる。

この時注意すべきは、.reshape(-1, 1)を用いて次元数を1から2に変更しています。scikit-learnの多くのアルゴリズムが2次元配列を入力として期待するため、、、みたいです。とりあえず単回帰分析の時は、この点注意しようと思います。

#散布図を描画
plt.plot(x ,y ,"o")#説明変数、目的変数を散布図にプロットする
plt.plot(x, model.predict(x.values.reshape(-1, 1)), linestyle="solid")#横軸にx, y軸に単回帰モデルを使用して説明変数xから予測した予測値を入れグラフ描写
plt.xticks([50,70,90,110], fontsize=10)#x軸のメモリ設定
plt.yticks([5000,7000,9000,11000,13000], fontsize=10)#y軸のメモリ設定
plt.xlabel("Sales(M JPY)",fontsize=10)#x軸のラベル設定
plt.ylabel("View",fontsize=10)#y軸のラベル設定
plt.show()

散布図と回帰直線は以下のようになります。でも、これだけでは関係あるのかパッと見わかりにくいです。
回帰式を算出、相関係数や決定係数を見てみたいと思います。

#モデルの回帰変数
print('モデル関数の回帰変数 w1: %.3f' % model.coef_)

#モデルの切片
print('モデル関数の切片 w2: %.3f' % model.intercept_)

#モデルの回帰式
print("y= %.3fx + %.3f" %(model.coef_, model.intercept_))

#x,yの相関係数
print("相関係数: %.3f" % x.corr(y))

#モデルの決定係数R2
print("決定係数R2: %.3f" % model.score(x.values.reshape(-1, 1), y))

%.3fの意味ですが、%:フォーマット文字列の開始、.3:小数点以下の桁数、f:不動小数点数、を表します。
print('モデル関数の回帰変数 w1: %.3f' % model.coef_)を例でとると、不動小数点model.coefの値が、小数点以下3桁で表されることになります。

以下が結果です。相関係数0.404ということなので、説明変数xと目的変数yの間にはやや相関がある、決定係数R2は0.163なので回帰式の当てはまりはよくない、という結果になりました。

  • この記事を書いた人

Haru

会社員。2回目の育休から仕事復帰。
職種は海外営業。
育休の過ごし方、育児、家事、プログラミング勉強について発信しています。

-IT・プログラミング, Python
-, , ,