線形回帰の概要
1。概要
線形回帰アルゴリズムは、連続変数を予測する方法です。その基本的な考え方は、サンプルポイントの従属変数と独立変数の間の関係を通じてサンプルポイントに適合するように数学モデルを設定することです。線形回帰アルゴリズムは、すべて最適なモデルを見つけることです。
線形回帰アルゴリズムには2つのコアがあります。まず、一次カーブフィッティングと二次カーブフィッティングのどちらを使用するかなど、適切なモデルを想定します。次に、最適なパラメータを見つけます。さまざまなパラメータがモデルのさまざまな形状に対応します。最適なパラメータを見つける方法は非常に重要です。
回帰の目的は、数値の目標値を予測することです。最も簡単な方法は、入力に基づいて目標値を計算するための式を作成することです。次の四半期の自動車販売台数を予測する場合は、次の式を使用できます。
nums = 0.005 * d-0.00099f
これはいわゆる回帰方程式であり、0.0015と-0.99は回帰の重みと呼ばれ、これらの回帰係数を見つけるプロセスは回帰です。
2.長所と短所
利点:結果は理解しやすく、計算が複雑ではありません。
短所:非線形データにうまく適合しません。
適用可能なデータ型:数値および名目データ。
3、通常の申請プロセス
(1)データの収集:任意の方法でデータを収集します。
(2)データの準備:回帰には数値データが必要であり、名目データはバイナリデータに変換されます。
(3)データの分析:データの視覚的な2次元グラフを描画すると、データの理解と分析に役立ちます。縮小法によって新しい回帰係数を取得した後、グラフ上に新しい近似線を描画して比較できます。
(4)トレーニングアルゴリズム:回帰係数を見つけます。
(5)テストアルゴリズム:R2または予測値のデータへの適合を使用して、モデルの効果を分析します。
(6)アルゴリズムの使用:回帰を使用すると、入力が与えられた場合に値を予測できます。これは、離散クラスラベルだけでなく連続データを予測できるため、分類方法よりも優れています。
2.ロジスティック回帰の概要
1。概要
ロジスティック回帰は、バイナリまたはマルチクラス分類に使用できます。
ロジスティック回帰は、最も人気のある機械学習アルゴリズムの1つであり、教師あり学習手法に属しています。これは、特定の独立変数のセットを使用して分類を予測するために使用されます。
ロジスティック回帰は、ロジスティック関数を使用して条件付き確率をモデル化する統計モデルです。ロジスティック回帰の考え方は、特徴と特定の結果の確率との関係を見つけることです。
2.長所と短所
利点:計算コストがかからず、理解と実装が簡単です。
短所:アンダーフィットしやすく、分類精度が高くない場合があります。
適用可能なデータ型:数値および名目データ。
3、通常の申請プロセス
(1)データの収集:任意の方法でデータを収集します。
(2)データの準備:距離計算が必要なため、データ型は数値である必要があります。または、構造化データ形式が最適です。
(3)データの分析:任意の方法を使用してデータを分析します。
(4)トレーニングアルゴリズム:ほとんどの場合、トレーニングに使用されます。トレーニングの目的は、最適な分類係数と回帰係数を見つけることです。
(5)アルゴリズムのテスト:トレーニングステップが完了すると、分類は高速になります。
(6)アルゴリズムの使用:最初に、いくつかのデータを入力して対応する構造化された値に変換する必要があります;次に、トレーニングされた回帰係数に基づいて、これらの値に対して単純な回帰計算を実行して、それらが属するカテゴリを決定できます;この後、出力カテゴリに対して他の分析作業を行うことができます。
第三に、線形回帰とロジスティック回帰の類似点と相違点
機械学習には、回帰、分類、クラスタリングの3つの主要な問題があります。
線形回帰は回帰問題ですが、ロジスティック回帰は分類問題です。
この2つはまったく異なる問題を解決しますが、アルゴリズムの本質を掘り下げてみると、まだ多くの共通点があります。たとえば、どちらも最急降下法を使用して最適なモデルを見つけます。
ただし、線形回帰フィットの目的は、データポイントを直線上に配置することですが、ロジスティック回帰の目的は、線の両側に異なるクラスのポイントを配置することです。
フォームの比較
線形回帰 |
ロジスティック回帰 |
線形回帰は、教師あり回帰モデルです。 |
ロジスティック回帰は、教師あり分類モデルです。 |
線形回帰では、整数で値を予測します。 |
ロジスティック回帰では、値を1または0として予測します。 |
ここでは活性化関数は使用されていません。 |
ここでは、活性化関数を使用して線形回帰方程式をロジスティック回帰方程式に変換します |
しきい値は必要ありません。 |
しきい値が必要です。 |
ここでは、次の重み値を予測するために二乗平均平方根誤差(RMSE)を計算します。 |
ここでは、精度を使用して次の重み値を予測します。 |
ここで、従属変数は数値であり、応答変数は連続である必要があります。 |
ここでの従属変数には、2つのカテゴリーのみが含まれています。一連の量的またはカテゴリの独立変数が与えられると、ロジスティック回帰は従属変数のオッズ結果を推定します。 |
これは最小二乗推定に基づいています。 |
これは最尤推定に基づいています。 |
ここで、トレーニングデータセットをプロットすると、最大グラフに接する直線を描くことができます。 |
係数を変更すると、ロジスティック関数の方向と急勾配が変更されます。これは、正の勾配がS字型の曲線になり、負の勾配がZ字型の曲線になることを意味します。 |
線形回帰は、独立変数に変化がある場合に従属変数を推定するために使用されます。たとえば、住宅価格を予測します。 |
一方、ロジスティック回帰は、イベントの確率を計算するために使用されます。たとえば、組織が良性か悪性かを分類します。 |
線形回帰は、従属変数の正規分布またはガウス分布を想定しています。 |
ロジスティック回帰は、従属変数の二項分布を想定しています。 |
4.簡単な例
1.単純な線形回帰
データセットは非常に単純で、時間用に1列、スコア用に1列です。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression
# 读取数据
dataset = pd.read_csv('studentscores.csv')
X = dataset.iloc[ : , : 1 ].values
Y = dataset.iloc[ : , 1 ].values
# 分割训练数据和测试数据
X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0)
# 使用线性回归进行训练
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)
# 进行预测
Y_pred = regressor.predict(X_test)
# 可视化训练结果
plt.scatter(X_train , Y_train, color = 'red')
plt.plot(X_train , regressor.predict(X_train), color ='blue')
# 可视化预测结果
plt.scatter(X_test , Y_test, color = 'red')
plt.plot(X_test , regressor.predict(X_test), color ='blue')
次の図は、トレーニング結果を視覚化したものです。
2.重回帰
データセットの例は次のとおりです
研究開発費 | 管理 | マーケティング支出 | 州 | 利益 |
165349.2 | 136897.8 | 471784.1 | ニューヨーク | 192261.83 |
162597.7 | 151377.59 | 443898.53 | カリフォルニア | 191792.06 |
153441.51 | 101145.55 | 407934.54 | フロリダ | 191050.39 |
144372.41 | 118671.85 | 383199.62 | ニューヨーク | 182901.99 |
参照コードは次のとおりです
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 4 ].values
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])
onehotencoder = OneHotEncoder()
X = onehotencoder.fit_transform(X).toarray()
X = X[: , 1:]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)
3.単純なロジスティック回帰
データセットには、ソーシャルネットワークのユーザーに関する情報が含まれています。この情報は、ユーザーID、性別、年齢、推定給与です。自動車会社はちょうど彼らの真新しい高級SUVを発表しました。ソーシャルネットワークのどのユーザーがこのブランドの新しいSUVを購入するかを確認しようとしていますここの最後の列は、ユーザーがこのSUVを購入した場合、ユーザーが購入するかどうかを2つの変数に基づいて予測するモデルを構築することを示しています。年齢と推定給与SUVを購入しないでください。したがって、機能マトリックスにはこれら2つの列しかありません。ユーザーの年齢と推定給与と、SUVを購入するかどうかの決定との間に何らかの相関関係を見つけたいと考えています。
データセットの例は次のとおりです
ユーザーID | 性別 | 年 | EstimatedSalary | 購入した |
15624510 | 男 | 19 | 19000 | 0 |
15810944 | 男 | 35 | 20000 | 0 |
15668575 | 女性 | 26 | 43000 | 0 |
15603246 | 女性 | 27 | 57000 | 0 |
15804002 | 男 | 19 | 76000 | 0 |
15728773 | 男 | 27 | 58000 | 0 |
15598044 | 女性 | 27 | 84000 | 0 |
15694829 | 女性 | 32 | 150000 | 1 |
コードリファレンスは次のとおりです
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 读取数据集
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
# 分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# 实现特征缩放
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# 创建并训练
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
# 测试
y_pred = classifier.predict(X_test)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)