Pythonを使用した線形回帰?
線形回帰は、2つの変数の間に正または負の関係があるかどうかを示す、機械学習の最も簡単な標準ツールの1つです。
線形回帰は、迅速な予測分析に適した数少ないツールの1つです。このセクションでは、python pandasパッケージを使用してデータを読み込み、線形回帰モデルを推定、解釈、視覚化します。
さらに下に行く前に、最初に回帰とは何かについて説明しましょう。
回帰とは何ですか?
回帰は、従属変数と独立変数の間の関係を作成するのに役立つ予測モデリング手法の形式です。
回帰の種類
- 線形回帰
- ロジスティック回帰
- 多項式回帰
- ステップワイズ回帰
線形回帰はどこで使用されますか?
- 傾向と売上予測の評価
- 価格変更の影響の分析
- リスクの評価
線形回帰モデルを構築する手順
-
まず、セットアップを構築し、データセットとjupyterをダウンロードします(このチュートリアルで使用しているので、anacondaなどの他のIDEを使用できます)。
-
必要なパッケージとデータセットをインポートします。
-
データセットを読み込んだら、データセットを調べます。
-
データセットを使用して線形回帰を実行します
-
次に、変数と時刻の関係を調べます。
-
まとめ。
セットアップ
以下のリンクからデータセットをダウンロードできます
https://en.openei.org/datasets/dataset/649aa6d3-2832-4978-bc6e-fa563568398e/resource/b710e97d-29c9-4ca5-8137-63b7cf447317/download/building1retail.csv
これを使用して、外気温(OAT)を説明変数として使用して建物の電力をモデル化します。
csvファイルをjupyterまたはIDEがインストールされているのと同じフォルダーに保存します。
必要なライブラリとデータセットをインポートする
まず、必要なライブラリをインポートしてから、pandaspythonライブラリを使用してデータセットを読み取ります。
# Importing Necessary Libraries import pandas as pd #Required for numerical functions import numpy as np from scipy import stats from datetime import datetime from sklearn import preprocessing from sklearn.model_selection import KFold from sklearn.linear_model import LinearRegression #For plotting the graph import matplotlib.pyplot as plt %matplotlib inline # Reading Data df = pd.read_csv('building1retail.csv', index_col=[0], date_parser=lambda x: datetime.strptime(x, "%m/%d/%Y %H:%M")) df.head()
出力
データセットの探索
それでは、最初にパンダでプロットしてデータセットを視覚化しましょう。
df.plot(figsize=(22,6))
出力
したがって、x軸は2010年1月から2011年1月までのデータを示しています。
上記の出力を見ると、プロットには2つの奇妙なことがあります。
-
欠測データはないようです。確認するには、次のコマンドを実行してください:
df.isnull().values.any()
出力
False
誤った結果は、データフレームにnull値がないことを示しています。
-
データにいくつかの異常があるようです(長い下向きのスパイク)
異常または「外れ値」は、通常、実験誤差の結果であるか、真の値である可能性があります。いずれの場合も、回帰直線の傾きに深刻な影響を与えるため、破棄します。
「外れ値」を破棄する前に、まずデータがどのような分布を表しているかを確認しましょう。
df.hist()
出力
上記のヒストグラムから、グラフが正規分布にほぼ従うデータを示していることがわかります。
それでは、平均から3標準偏差を超えるすべての値を削除して、新しいデータフレームをプロットしましょう。
std_dev = 3 df = df[(np.abs(stats.zscore(df)) < float(std_dev)).all(axis=1)] df.plot(figsize=(22, 6))>
出力
したがって、上記の出力からわかるように、スパイクをある程度除去し、データをクリーンアップしました。
線形関係を検証する
OATと電力の間に線形関係があるかどうかを確認するために、簡単な散布図をプロットしてみましょう。
plt.scatter(df['OAT (F)'], df['Power (kW)'])
出力
線形回帰
モデルを実行してパフォーマンスを評価するために、Scikit-learnモジュールも使用し、k分割交差検定(k =3)を使用してモデルのパフォーマンスを評価します。
X = pd.DataFrame(df['OAT (F)']) y = pd.DataFrame(df['Power (kW)']) model = LinearRegression() scores = [] kfold = KFold(n_splits=3, shuffle=True, random_state=42) for i, (train, test) in enumerate(kfold.split(X, y)): model.fit(X.iloc[train,:], y.iloc[train,:]) score = model.score(X.iloc[test,:], y.iloc[test,:]) scores.append(score) print(scores)
出力
[0.38768927735902703, 0.3852220878090444, 0.38451654781487116]
上記のプログラムでは、model =LinearRegression()が線形回帰モデルを作成し、forループがデータセットを3つに分割します。次に、ループ内でデータを適合させ、スコアをリストに追加してパフォーマンスを評価します。
ただし、結果は見栄えが悪く、パフォーマンスを向上させることができます。
時刻
パワー(変数)は、時刻に大きく依存します。この情報を使用して、ワンホットエンコーディングを使用して回帰モデルに組み込みましょう。
model = LinearRegression() scores = [] kfold = KFold(n_splits=3, shuffle=True, random_state=42) for i, (train, test) in enumerate(kfold.split(X, y)): model.fit(X.iloc[train,:], y.iloc[train,:]) scores.append(model.score(X.iloc[test,:], y.iloc[test,:])) print(scores)
出力
[0.8074246958895391, 0.8139449185141592, 0.8111379602960773]
これがモデルの大きな違いです。
概要
このセクションでは、データセットを探索し、回帰モデルに適合するように準備するための基本を学びました。パフォーマンスを評価し、欠点を検出して修正しました。
-
PyTorchを使用した線形回帰?
線形回帰について 単純な線形回帰の基本 2つの連続変数間の関係を理解できます。 例- x=独立変数 重量 y=従属変数 高さ y=αx+β プログラムによる単純な線形回帰を理解しましょう- #Simple linear regression import numpy as np import matplotlib.pyplot as plt np.random.seed(1) n = 70 x = np.random.randn(n) y = x * np.random.randn(n) colors = np.random.r
-
PythonでのCX_Freezeの使用
時々私たちは非常にエキサイティングな何か違うものを作りたいと感じます、そして人間の性質によれば、私たちはいつもそれを共有するのが大好きです。 Pythonもそれらの願いを満たします。 Pythonを使用して、Pythonプログラムを友人と共有したい場合は、それを行うことができます。必要なのは、マシンのプログラムで使用されるすべてのモジュールに同じバージョンのPythonをインストールすることだけです。 まず、 pip install CX_Frezzeを使用してCX_Freezeモジュールをインストールする必要があります コマンドプロンプトのコマンド。 最初のステップは、この割り当て、