Seaborn-linear-relationships
提供:Dev Guides
シーボーン-線形関係
ほとんどの場合、複数の量的変数を含むデータセットを使用しますが、分析の目的は多くの場合、これらの変数を相互に関連付けることです。 これは回帰線を介して行うことができます。
回帰モデルの構築中に、*多重共線性*をチェックすることがよくあります。連続変数のすべての組み合わせ間の相関を確認する必要があり、多重共線性が存在する場合は削除するために必要なアクションを実行します。 このような場合、次の手法が役立ちます。
線形回帰モデルを描く関数
Seabornには、回帰によって決定された線形関係を視覚化する2つの主要な機能があります。 これらの関数は、* regplot()および lmplot()*です。
regplot vs lmplot
regplot | lmplot |
---|---|
accepts the x and y variables in a variety of formats including simple numpy arrays, pandas Series objects, or as references to variables in a pandas DataFrame | has data as a required parameter and the x and y variables must be specified as strings. This data format is called “long-form” data |
プロットを描きましょう。
例
この例の同じデータを使用して、regplotをプロットしてからlmplotをプロットします。
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.regplot(x = "total_bill", y = "tip", data = df)
sb.lmplot(x = "total_bill", y = "tip", data = df)
plt.show()
出力
2つのプロットのサイズの違いを確認できます。
変数の1つが離散値を取る場合、線形回帰を近似することもできます
例
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('tips')
sb.lmplot(x = "size", y = "tip", data = df)
plt.show()
出力
さまざまな種類のモデルの適合
上記で使用した単純な線形回帰モデルは非常に簡単に適合できますが、ほとんどの場合、データは非線形であり、上記の方法では回帰直線を一般化できません。
Anscombeのデータセットを回帰プロットで使用してみましょう-
例
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x="x", y="y", data=df.query("dataset == 'I'"))
plt.show()
この場合、データは分散の少ない線形回帰モデルに適しています。
データの偏差が大きく、最適なラインが良くないことを示す別の例を見てみましょう。
例
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x = "x", y = "y", data = df.query("dataset == 'II'"))
plt.show()
出力
プロットは、回帰線からのデータポイントの高い偏差を示しています。 このような非線形の高次は、* lmplot()および regplot()*を使用して視覚化できます。これらは、データセットの単純な種類の非線形傾向を調べるために多項式回帰モデルに適合できます-
例
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
df = sb.load_dataset('anscombe')
sb.lmplot(x = "x", y = "y", data = df.query("dataset == 'II'"),order = 2)
plt.show()