windows 10 Pro + hyper-v で、

vagrant up –provider=hyperv

としたところ、以下のエラー

PS C:\workspaces\vm\centos7> vagrant up --provider=hyperv
Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
==> default: Importing a Hyper-V instance
    default: Cloning virtual hard drive...
    default: Creating and registering the VM...
An error occurred while executing a PowerShell script. This error
is shown below. Please read the error message and see if this is
a configuration error with your system. If it is not, then please
report a bug.

Script: import_vm_xml.ps1
Error:

C:\Programs\Vagrant\embedded\gems\2.1.1\gems\vagrant-2.1.1\plugins\providers\hyperv\scripts\import_vm_xml.ps1 : パラメ
ーター名 'switchid' に一致するパラメーターが見つかりません。
発生場所 行:1 文字:327
+ ... achines/default/hyperv/Virtual Hard Disks/disk.vhd' -switchid 'c08cb7 ...
+                                                         ~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [import_vm_xml.ps1]、ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,import_vm_xml.ps1

Hyper-VでVagrant upできない人はこれを見てみて (Vagrant 2.1.1対応方法更新しました)

の対応方法に従い、レジストリを修正

コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\vmsmp\parameters\SwitchList

vagrant_regedit

するも、エラー修正されず。。。

https://github.com/hashicorp/vagrant/issues/9774

上記スレッドに解決しそうなコメントがあったので、試す。

以下のスクリプトを編集

{インストールディレクトリ}Vagrant\embedded\gems\2.1.1\gems\vagrant-2.1.1\plugins\providers\hyperv\scripts\import_vm_xml.ps1

ダミーパラメーターを追加

[string]$switchid

スイッチ名を先頭行に指定(値は、上記レジストリエディタで指定した値)

$switchname = "DefaultSwitch"

Param(
          :
    [string]$enable_virtualization_extensions=$False,
    [string]$switchid
)
$switchname = "DefaultSwitch"

再度 vagrant up –provider=hyperv

vagrant_success

成功した!

vagrant_hyperv

SSHでの接続もOK


1.重回帰分析

Bostonデータセットの各項目の内容を説明変数として、scikit-learn を用いて線形回帰モデルを作成、重回帰分析を行ってみる。

from sklearn import datasets
import pandas as pd
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import numpy as np

def multi_regression(*feature_index):
    """
    重回帰分析
    http://www.randpy.tokyo/entry/2017/06/26/153800
    http://wcs.hatenablog.com/entry/2016/11/08/231703
    https://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0
    https://pythondatascience.plavox.info/matplotlib/%E6%A3%92%E3%82%B0%E3%83%A9%E3%83%95
    :return:
    """
    boston = datasets.load_boston()
    df = pd.DataFrame(boston.data)
    df.columns = boston.feature_names
    df['PRICE'] = pd.DataFrame(boston.target)

    x = df.loc[:, ['{0}'.format(x) for x in feature_index]]
    y = df['PRICE']

    model = smf.OLS(y, x)
    result = model.fit()
    print(result.summary())

    # numpy sort
    # https://qiita.com/supersaiakujin/items/c580f2aae90818150b35
    desc_idx = np.argsort(result.tvalues.values)[::-1]
    labels = []
    values = []
    for idx in desc_idx:
        labels.append(feature_index[idx])
        values.append(result.tvalues.values[idx])

    plt.bar(labels, values)
    plt.legend(title="r^2(adj) = {0:.6}".format(result.rsquared_adj))

    plt.show()


if __name__ == "__main__":
    multi_regression('CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT')
    # multi_regression('RM', 'AGE', 'TAX', 'B')

分析結果について、summary() メソッドを呼び出すことで、以下の結果表が得られる。

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  PRICE   R-squared:                       0.959
Model:                            OLS   Adj. R-squared:                  0.958
Method:                 Least Squares   F-statistic:                     891.1
Date:                Mon, 04 Jun 2018   Prob (F-statistic):               0.00
Time:                        22:53:10   Log-Likelihood:                -1523.8
No. Observations:                 506   AIC:                             3074.
Df Residuals:                     493   BIC:                             3129.
Df Model:                          13                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
CRIM          -0.0916      0.034     -2.675      0.008      -0.159      -0.024
ZN             0.0487      0.014      3.379      0.001       0.020       0.077
INDUS         -0.0038      0.064     -0.059      0.953      -0.130       0.123
CHAS           2.8564      0.904      3.160      0.002       1.080       4.633
NOX           -2.8808      3.359     -0.858      0.392      -9.481       3.720
RM             5.9252      0.309     19.168      0.000       5.318       6.533
AGE           -0.0072      0.014     -0.523      0.601      -0.034       0.020
DIS           -0.9680      0.196     -4.947      0.000      -1.352      -0.584
RAD            0.1704      0.067      2.554      0.011       0.039       0.302
TAX           -0.0094      0.004     -2.393      0.017      -0.017      -0.002
PTRATIO       -0.3924      0.110     -3.571      0.000      -0.608      -0.177
B              0.0150      0.003      5.561      0.000       0.010       0.020
LSTAT         -0.4170      0.051     -8.214      0.000      -0.517      -0.317
==============================================================================
Omnibus:                      204.050   Durbin-Watson:                   0.999
Prob(Omnibus):                  0.000   Jarque-Bera (JB):             1372.527
Skew:                           1.609   Prob(JB):                    9.11e-299
Kurtosis:                      10.399   Cond. No.                     8.50e+03
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 8.5e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
No handles with labels found to put in legend.

いろいろ警告が出ていますが、結果の見方を知りたい。

説明変数の各項目については、Bostonデータセットを引き続き使用

基本統計量

項目 内容
最小二乗回帰(OLS : Ordinary Least Squares regression)分析モデルとして最小二乗法を使用
回帰係数(ceof) 回帰係数は単位の影響を受けるため、影響度の指標としては利用できない
標準誤差(std err) 平均からのバラツキを示す指標、分散の正の平方根
t値(t) 目的変数に対するそれぞれの説明変数の影響度を表す。回帰係数は単位の影響を受け、影響度の指標に利用できないため、回帰係数を標準誤差で除し単位の影響を受けないt値を利用する。t値の絶対値が大きいほど、影響度の強い説明変数といえる
P-値 p値 は、全く効果がない場合(係数=0)に、分析結果として出る係数の値が、A以上になる確率を表す。
下限97.5%97.5%の信頼区間下限。
上限97.5% 97.5%の信頼区間上限
重決定 R2(R-squared)寄与率または決定係数と呼ばれ、回帰式全体の精度を表す。1に近いほど制度が高いといえる。
補正 R2(Adj R-squared)自由度調整済み決定係数

t値を降順にソートして棒グラフにプロット。

住宅価格に影響を与えている変数を分析できる。

multi_reg

1.単回帰分析

  • 単回帰分析とは、2つのデータ群を「原因」と「結果」でとらえたときに、その関係を「回帰直線」であらわすことのできる分析手法
  • 単回帰式 y = ax + b を求めることで、値を予測できる
項目 内容
説明変数(x) 原因系のデータ
目的変数(y) 結果系のデータ
回帰係数(a) 最小二乗法による傾き
切片(b) 最小二乗法によるy切片
決定係数回帰式の精度判断基準として一般的に「単相関係数」を二乗した値が使われる。(決定係数、寄与率などと呼ばれる)0 から 1の値をとり、1に近いほど回帰式の精度がよい(xとyの関係が強い)

2.試してみる

Python 数学、統計、機械学習:散布図と相関分析(1) で描いた散布図に回帰直線を重ねる

scikit-learn に含まれる、線形回帰モデルを利用する。


from sklearn import datasets
from sklearn import linear_model
import pandas as pd
import matplotlib.pyplot as plt
import math


def liner_regression(*feature_index):
    """
    https://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0
    :return:
    """

    # 線形回帰予測クラス
    lr = linear_model.LinearRegression()

    boston = datasets.load_boston()

    df_ex = pd.DataFrame(boston.data)
    df_ex.columns = boston.feature_names
    import pprint
    print(pprint.pprint(df_ex))

    df_res = pd.DataFrame(boston.target)
    df_res.columns = ['Price']

    y = df_res['Price']
    fig = plt.figure()

    cnt = len(feature_index)
    cols = 1 if cnt == 1 else (2 if cnt < 6 else 4)
    rows = math.ceil(cnt / cols)
    idx = 1
    for feature in feature_index:

        x = df_ex[feature]
        ax = fig.add_subplot(rows, cols, idx)

        ax.set_title(feature, fontdict={'fontsize': 10}, pad=2)
        ax.scatter(x, y, s=0.5)

        mat_x = x.reshape((-1, 1))
        mat_y = y.reshape((-1, 1))

        # 予測モデルを作成
        # y = ax + b
        lr.fit(mat_x, mat_y)

        # a:回帰係数
        a = lr.coef_

        # b:切片 (誤差)
        b = lr.intercept_

        # R^2:決定係数
        r2 = lr.score(mat_x, mat_y)

        # 予測を実行
        predict = lr.predict(mat_x)

        # 予測をプロット
        ax.plot(x, predict, 'k--', lw=0.5)

        label = "y = {0:.4f}x + {1:.4f}\nR^2 = {2:.4f}".format(a[0][0], b[0], r2)
        ax.text(x.min(), y.min(), label, fontdict={'fontsize': 8})

        idx = idx + 1

    plt.tight_layout()
    plt.show()


if __name__ == "__main__":
    # liner_regression('CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT')
    liner_regression('RM', 'AGE', 'TAX', 'B')

以下のようなエラーがでるので、指示に従って、x.reshape(-1, 1) としています。

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

https://stackoverflow.com/questions/35082140/preprocessing-in-scikit-learn-single-sample-depreciation-warning

>>> import pandas as pd
>>> df = pd.DataFrame([1,2,3])
>>> df.columns = ['x']
>>> x = df['x']
x
0    1
1    2
2    3
Name: x, dtype: int64
>>> x.reshape((-1,1))
array([[1],
       [2],
       [3]])

LinearRegressionのAPIについて以下サイトから引用させてもらいます。

https://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0

sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,
                                      copy_X=True, n_jobs=1)
パラメータ 内容
fit_intercept False に設定すると切片を求める計算を含めない。目的変数が原点を必ず通る性質のデータを扱うときに利用。 (デフォルト値: True)
normalize True に設定すると、説明変数を事前に正規化します。 (デフォルト値: False)
copy_X メモリ内でデータを複製してから実行するかどうか。 (デフォルト値: True)
n_jobs 計算に使うジョブの数。-1 に設定すると、すべての CPU を使って計算します。 (デフォルト値: 1)
属性 内容
coef_ 偏回帰係数
intercept_ 切片
メソッド 内容
fit(X, y[, sample_weight]) 線形回帰モデルのあてはめを実行
get_params([deep]) 推定に用いたパラメータを取得
predict(X) 作成したモデルを利用して予測を実行
score(X, y[, sample_weight]) 決定係数 R2を出力
set_params(**params) パラメータを設定

line_reg