fc2ブログ

Raspberry Pi 4を買う(2)

 前回の続きです。前回、苦労しながらようやくRaspi4にSSH接続できましたので、今回はリモート(VNC)接続するための設定のお話です。
 まずは、Raspiが自宅ネットワーク上に複数台ありますので、dhcpcd.confを変更し、Raspi4を固定IPアドレス設定にしました。Setting1_Static-Wi-Fi-IPaddress_200308.png
 次に、初期設定として、必要最小限のパスワード変更、国、言語、タイムゾーンの設定を以下のコマンドで行いました。
pi@raspberrypi:~ $ sudo raspi-config
Setting2_InitialCondition_200308.pngパスワード変更は「1 change User Password」で、国、言語、タイムゾーンは「4 Localisation Options」で変更可能です。「I1 Change Locale」で「en_GB.UTF-8 UTF-8(default)」に加えて、「ja_JP.UTF-8 UTF-8」にチェックを入れました。Setting_langcode1_200308.pngja_JP.UTF-8が追加されていることを確認しました。Setting_langcode2_200308.png次に「I2 Change Timezone」でAsiaを選択し、Setting_timezone1_200308.pngTokyoを選択して完了です。Setting_timezone2_200308.png
 次にリモート(VNC)接続ソフトウェアを以下のコマンドでインストールし、実行させました。
pi@raspberrypi:~ $ sudo apt install tightvncserver
pi@raspberrypi:~ $ tightvncserver
Run_VNCserver_200308.pngUbuntuから以下のコマンドでリモート確認してみます。Run_VNCviewer_200308.png問題なく接続できました。VNC_connection_image_200308.png
 前回の話で不要となった「micro HDMI-VGA変換ケーブル」も届きました。microHDMI_to_VGA_adaptor_200308.png使わないのももったいないので、動作確認をする上で、ディスプレイに接続して、キーボード、マウスも装着してRaspi4の電源を入れました。
 デスクトップが立ち上がった後に、Windowメッセージが表示されていたので、順次処理しました。リモート(VNC)でRaspi4に接続した際には出ていない画面です。ヘッドレスインストールした際に残ってしまうのかなと思いつつ、気持ち悪いので最後まで処理を行いました。DesktopMessage1_200308.pngセッティングが残っているとのメッセージなので、Nextで進みます。DesktopMessage2_200308.png国、言語、タイムゾーンの設定もすでに完了しているので、Nextで進みます。DesktopMessage3_200308.pngパスワードも変更済みなので、Nextで進みます。DesktopMessage4_200308.pngスクリーン設定も問題ないので、Nextで進みます。DesktopMessage5_200308.pngWi-Fiの設定も完了しているので、Nextで進みます。DesktopMessage6_200308.pngソフトウェアのアップデートも実施済みですが、Nextで再チェックします。DesktopMessage7_200308.pngしばらく待つとセットアップが完了した旨が表示されますので、Restartボタンで再起動させました。再起動後はこれらのメッセージは出なくなりました。

最後に、Visual Studio Code(VSCode)をRaspi4にインストールしていたのですが、VNC上で表示できなかった問題がありました。ところが、VScodeをデスクトップから読み出すと、問題なく起動しました。VNCでは表示できないアプリもあるのですね。VScode_raspi_200308.png
 SSH接続して、初期設定を終え、VNC接続も問題ありません。インストール時に一時足止めを食いましたが、何とか使えるようになりました。今後、追加の環境を整えて行こうと思います。
スポンサーサイト



Raspberry Pi 4を買う(1)

 Raspberry Pi 4 Model Bのメモリ4GBモデルを購入しました。RaspiはPi 2を2台、Pi Zeroを1台所有しているので4台目です。先日、Raspberry Piが8周年記念で「最新のPi4の2GBモデルを値下げする」というネット記事が出ていましたね。もう8年経つんですね。私は2015年(Pi2)からのユーザなので5年目です。当時はIoTのホビーや学習用の域だったと記憶していますが、最近は産業用でも利用されており、強い市民権を得た感がありますね。
 Raspi4本体ケースヒートシンクは秋月で購入しました。ヒートシンクは発熱が多いとのネット記事から気休めの購入ですが、まだ装着していません。Raspi4_and_case_200308.png 商品が届いて、いざセットアップの段になって、よくよく確認すると、Raspi側の電源コネクタが「USB Type-C」でACアダプタは推奨5V-3Aとのこと。また、ディスプレイコネクタが「micro HDMI」に変わっていることに気付きました(不覚・・)。既存のRaspiに使っている電源やケーブル類で何とかなると思っていたのですが、確認不足でした・・。セットアップは一時お預けです。きちんと確認しておかなくてはダメですね・・教訓。
 ちなみに、所有しているPi2とPiZeroの電源コネクタはともに「USB micro Type-B」です。USBの規格って、mini、micro、Type-A、B、C、いろいろあって混乱しますね・・。ディスプレイコネクタはPi2はHDMI、PiZeroはmini HDMIで手持ちのものが使えず・・。HDMIも標準、mini、microと規格がいろいろあるんですね・・。

 結局、5V−3AのUSB Type-CタイプのACアダプタは必要なのでAmazonで購入しました。ディスプレイは最悪接続しなくても行ける「ヘッドレスインストール」ができるとのことなので、今回はそちらでトライすることにしました。ヘッドレスインストールはディスプレイ、キーボード、およびマウスなしでRaspiをセットアップできるので便利ですね。セットアップ後も通常はリモートでRaspiに接続して操作しているので、ディスプレイ、キーボード、およびマウスはそもそも必要ないですからね。

 偉そうなことを言いながら、「ヘッドレスインストール」も確認不足で一度失敗してしまいました。そのこともお話しします。インストールはネット上のこのサイトを参考にしました。
 今まで何度かRaspiのインストールをしていたので、途中までは一緒だろうという思い込みで、SDカードへのソフトの書き込みは「NOOBS」を使って行いました。これが間違いでした。SetupMethod_NOOBS_200308.pngNOOBSでダウンロードしたzipファイルをSDカードに展開し、参考サイトに記載の「sshの空ファイル」と「Wi-Fi設定ファイル(wpa_supplicant.conf)」を追加した後に、Raspi4の電源ONしてもsshでRaspi4に接続できず・・。また、試行錯誤の中で以下のコマンドを実行すると、自宅ネットワーク上にあるRaspi2にssh接続される始末・・。
ssh pi@raspberrypi.local
Raspi4をインストールする際には、邪魔をしそうな?Raspi2を自宅ネットワークから一時的に外しておいた方が良さそうです・・。

 ヘッドレスインストールを諦めて、ディスプレイ、キーボード、マウスを付けて、いつも通りのインストールをしようと、不本意ながら「micro HDMI-VGAの変換ケーブル」を楽天に発注。980円也。
 発注後、再度ネットで調べていると、NOOBSのzipファイルの内容ではなくて、imgファイルの内容を書き込まないと「ヘッドレスインストール」ができないことに気付きました。Setup_RaspbianImage_200308.png慌てて先程の「micro HDMI変換ケーブル」の発注取り消しを行おうとしましたが、取り消し可能な「発注後30分以内」を超えていたのでNG。勉強代として諦めました・・。

 書き込む内容の間違いに気付いて、再トライです。手順は参考サイトの通りです。Wi-Fi設定ファイル(wpa_supplicant.conf)の中身は以下の通りです。Wi-Fi_setting_200308.png 今回はsshコマンドでRaspi4に接続できました。Raspi4本体が届いて、約1週間の道のりでした。勝手な思い込みと事前の準備の不十分さで手間がかかってしまいました。いい勉強になりました(自戒)。自戒次回は、SSH接続したRaspi4の環境設定についてお話します。

RからPythonへの道(13)

 今回は「12. 回帰分析(多項式回帰)」について、PythonとRで計算していきたいと思います。教材は『データサイエンス教本』を参考にしました。多項式回帰分析は以下の式で表され、非線形回帰分析に分類されるものです。Polynomial-Regression_200301.png まずはPythonのコードです。Rのデータセットである「cars」を読み込んで、statsmodelsライブラリの一般最小二乗法OLS(Ordinary Least Squares)を用いて解析を進めました。目的変数はdist、説明変数はspeedで、次数が1(単回帰)、2、3の場合について行いました。
# Polynomial regression

import numpy as np
import statsmodels.formula.api as smf
from rpy2.robjects import r, pandas2ri
import matplotlib.pyplot as plt
pandas2ri.activate()

# data read
df = r['cars'] # read datasets of cars
print(df.head())
x = df.speed
y = df.dist

# 1st-order
result1 = smf.ols('dist ~ speed', data=df).fit()
print(result1.summary())

# 2nd-order
result2 = smf.ols('dist ~ speed + np.power(speed, 2)', data=df).fit()
print(result2.summary())

# 3rd-order
result3 = smf.ols('dist ~ speed + np.power(speed, 2) + np.power(speed, 3)', data=df).fit()
print(result3.summary())

#graph
plt.scatter(x, y)

b0_1, b1_1 = result1.params # beta0, beta1
b0_2, b1_2, b2_2 = result2.params # beta0, beta1, beta2
b0_3, b1_3, b2_3, b3_3 = result3.params # beta0, beta1, beta2, beta3

plt.plot(x, b0_1 + b1_1*x, 'r')
plt.plot(x, b0_2 + b1_2*x + b2_2*x**2, 'g')
plt.plot(x, b0_3 + b1_3*x + b2_3*x**2 + b3_3*x**3, 'b')
plt.xlabel("speed")
plt.ylabel("dist")
plt.show()
 Pythonコードの結果は以下の通りです。
# 11行目
speed dist
1 4.0 2.0
2 4.0 10.0
3 7.0 4.0
4 7.0 22.0
5 8.0 16.0

# 17行目: 1st-order (y = b0 + b1*x)
OLS Regression Results
==============================================================================
Dep. Variable: dist R-squared: 0.651
Model: OLS Adj. R-squared: 0.644
Method: Least Squares F-statistic: 89.57
Date: 日, 01 3 2020 Prob (F-statistic): 1.49e-12
Time: 13:13:14 Log-Likelihood: -206.58
No. Observations: 50 AIC: 417.2
Df Residuals: 48 BIC: 421.0
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept -17.5791 6.758 -2.601 0.012 -31.168 -3.990
speed 3.9324 0.416 9.464 0.000 3.097 4.768
==============================================================================
Omnibus: 8.975 Durbin-Watson: 1.676
Prob(Omnibus): 0.011 Jarque-Bera (JB): 8.189
Skew: 0.885 Prob(JB): 0.0167
Kurtosis: 3.893 Cond. No. 50.7
==============================================================================

# 21行目: 2nd-order (y = b0 + b1*x + b2*x^2)
OLS Regression Results
==============================================================================
Dep. Variable: dist R-squared: 0.667
Model: OLS Adj. R-squared: 0.653
Method: Least Squares F-statistic: 47.14
Date: 日, 01 3 2020 Prob (F-statistic): 5.85e-12
Time: 13:13:14 Log-Likelihood: -205.39
No. Observations: 50 AIC: 416.8
Df Residuals: 47 BIC: 422.5
Df Model: 2
Covariance Type: nonrobust
======================================================================================
coef std err t P>|t| [0.025 0.975]
--------------------------------------------------------------------------------------
Intercept 2.4701 14.817 0.167 0.868 -27.338 32.278
speed 0.9133 2.034 0.449 0.656 -3.179 5.006
np.power(speed, 2) 0.1000 0.066 1.515 0.136 -0.033 0.233
==============================================================================
Omnibus: 11.173 Durbin-Watson: 1.762
Prob(Omnibus): 0.004 Jarque-Bera (JB): 11.061
Skew: 0.991 Prob(JB): 0.00396
Kurtosis: 4.173 Cond. No. 2.16e+03
==============================================================================

# 26行目: 3rd-order (y = b0 + b1*x + b2*x^2 + b3*x^3)
OLS Regression Results
==============================================================================
Dep. Variable: dist R-squared: 0.673
Model: OLS Adj. R-squared: 0.652
Method: Least Squares F-statistic: 31.58
Date: 日, 01 3 2020 Prob (F-statistic): 3.07e-11
Time: 13:13:14 Log-Likelihood: -204.94
No. Observations: 50 AIC: 417.9
Df Residuals: 46 BIC: 425.5
Df Model: 3
Covariance Type: nonrobust
======================================================================================
coef std err t P>|t| [0.025 0.975]
--------------------------------------------------------------------------------------
Intercept -19.5050 28.405 -0.687 0.496 -76.682 37.672
speed 6.8011 6.801 1.000 0.323 -6.889 20.491
np.power(speed, 2) -0.3497 0.500 -0.699 0.488 -1.356 0.657
np.power(speed, 3) 0.0103 0.011 0.907 0.369 -0.012 0.033
==============================================================================
Omnibus: 11.647 Durbin-Watson: 1.813
Prob(Omnibus): 0.003 Jarque-Bera (JB): 11.650
Skew: 1.037 Prob(JB): 0.00295
Kurtosis: 4.136 Cond. No. 8.75e+04
==============================================================================
グラフは以下の通りです。1、2、3次のフィッティングを赤、緑、青線で示しました。Python_result_200301.png 次にRのコードです。10、15、20行目の回帰分析はlm関数(線形モデル関数)とpoly関数(多項式関数)を使いました。今回のモデルは、厳密には非線形モデルですが、lm関数でも処理できるようです。後ほど、非線形モデル関数であるnls関数を使った例も示します。
# Polynomial regression

# data read
df = cars # cars dataset
head(df)
x = df$speed
y = df$dist

# 1st-order (y = b0 + b1*x)
df.lm1 = lm(y ~ poly(x, degree = 1, raw = TRUE))
summary(df.lm1)
y_pred1 = predict(df.lm1)

# 2nd-order (y = b0 + b1*x + b2*x^2)
df.lm2 = lm(y ~ poly(x, degree = 2, raw = TRUE))
summary(df.lm2)
y_pred2 = predict(df.lm2)

# 3rd-order (y = b0 + b1*x + b2*x^2 + b3*x^3)
df.lm3 = lm(y ~ poly(x, degree = 3, raw = TRUE))
summary(df.lm3)
y_pred3 = predict(df.lm3)

# graph
plot(x, y, xlab='speed', ylab='dist', pch=16)
lines(x, y_pred1, col=2) # red
lines(x, y_pred2, col=3) # green
lines(x, y_pred3, col=4) # blue
Rのコードの結果は以下の通りです。
# 5行目
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10

# 11行目: 1st-order (y = b0 + b1*x)
Call:
lm(formula = y ~ poly(x, degree = 1, raw = TRUE))

Residuals:
Min 1Q Median 3Q Max
-29.069 -9.525 -2.272 9.215 43.201

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
poly(x, degree = 1, raw = TRUE) 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12

# 16行目: 2nd-order (y = b0 + b1*x + b2*x^2)
Call:
lm(formula = y ~ poly(x, degree = 2, raw = TRUE))

Residuals:
Min 1Q Median 3Q Max
-28.720 -9.184 -3.188 4.628 45.152

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.47014 14.81716 0.167 0.868
poly(x, degree = 2, raw = TRUE)1 0.91329 2.03422 0.449 0.656
poly(x, degree = 2, raw = TRUE)2 0.09996 0.06597 1.515 0.136

Residual standard error: 15.18 on 47 degrees of freedom
Multiple R-squared: 0.6673, Adjusted R-squared: 0.6532
F-statistic: 47.14 on 2 and 47 DF, p-value: 5.852e-12

# 21行目: 3rd-order (y = b0 + b1*x + b2*x^2 + b3*x^3)
Call:
lm(formula = y ~ poly(x, degree = 3, raw = TRUE))

Residuals:
Min 1Q Median 3Q Max
-26.670 -9.601 -2.231 7.075 44.691

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -19.50505 28.40530 -0.687 0.496
poly(x, degree = 3, raw = TRUE)1 6.80111 6.80113 1.000 0.323
poly(x, degree = 3, raw = TRUE)2 -0.34966 0.49988 -0.699 0.488
poly(x, degree = 3, raw = TRUE)3 0.01025 0.01130 0.907 0.369

Residual standard error: 15.2 on 46 degrees of freedom
Multiple R-squared: 0.6732, Adjusted R-squared: 0.6519
F-statistic: 31.58 on 3 and 46 DF, p-value: 3.074e-11
グラフもPythonと同じ結果です。R_result_200301.png Rでは非線形回帰分析用にnls関数も準備されていますので、使ってみました。以下のコードの10、14、18行目です。実際の数式を解析式に記載している所はPythonのstatsmodelsライブラリと同じですね。
# Non-linear regression

# data read
df = cars # cars dataset
head(df)
x = df$speed
y = df$dist

# 1st-order (y = b0 + b1*x)
nls_1st = nls(y ~ b0_1 + b1_1*x, start = c(b0_1=1, b1_1=1), trace = TRUE)
summary(nls_1st)

# 2nd-order (y = b0 + b1*x + b2*x^2)
nls_2nd = nls(y ~ b0_2 + b1_2*x + b2_2*x^2, start = c(b0_2=1, b1_2=1, b2_2=1), trace = TRUE)
summary(nls_2nd)

# 3rd-order (y = b0 + b1*x + b2*x^2 + b3*x^3)
nls_3rd = nls(y ~ b0_3 + b1_3*x + b2_3*x^2 + b3_3*x^3, start = c(b0_3=1, b1_3=1, b2_3=1, b3_3=1), trace = TRUE)
summary(nls_3rd)
結果は以下の通りです。
# 11行目: summary(nls_1st)

Formula: y ~ b0_1 + b1_1 * x

Parameters:
Estimate Std. Error t value Pr(>|t|)
b0_1 -17.5791 6.7584 -2.601 0.0123 *
b1_1 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom

Number of iterations to convergence: 1
Achieved convergence tolerance: 3.137e-09

# 15行目: summary(nls_2nd)

Formula: y ~ b0_2 + b1_2 * x + b2_2 * x^2

Parameters:
Estimate Std. Error t value Pr(>|t|)
b0_2 2.47014 14.81717 0.167 0.868
b1_2 0.91329 2.03422 0.449 0.656
b2_2 0.09996 0.06597 1.515 0.136

Residual standard error: 15.18 on 47 degrees of freedom

Number of iterations to convergence: 1
Achieved convergence tolerance: 1.387e-07

# 19行目: summary(nls_3rd)

Formula: y ~ b0_3 + b1_3 * x + b2_3 * x^2 + b3_3 * x^3

Parameters:
Estimate Std. Error t value Pr(>|t|)
b0_3 -19.50505 28.40530 -0.687 0.496
b1_3 6.80111 6.80114 1.000 0.323
b2_3 -0.34966 0.49988 -0.699 0.488
b3_3 0.01025 0.01130 0.907 0.369

Residual standard error: 15.2 on 46 degrees of freedom

Number of iterations to convergence: 1
Achieved convergence tolerance: 2.441e-08
この結果も、lm、poly関数を使った場合と同じでした。結果をまとめると以下の通りです。Python、Rの2種類の解法は全て同じ結果でした。Rで汎用的に非線形回帰を実行する場合は「nls関数」を使った方が分かりやすいと思いました。result_all_200301.png
 Pythonで回帰分析を行う場合、statsmodelsライブラリを使えば、Rに似たようなコード記載ができるので、違和感なく使えそうです。今後も積極的に使っていこうと思います。

『RからPythonへの道』バックナンバー
(1) はじめに
(2) 0. 実行環境(作業環境)
(3) 1. PythonからRを使う方法 2. RからPythonを使う方法
(4) 3. データフレーム
(5) 4. ggplot
(6) 5.行列
(7) 6.基本統計量
(8) 7. 回帰分析(単回帰)
(9) 8. 回帰分析(重回帰)
(10) 9. 回帰分析(ロジスティック回帰1)
(11) 10. 回帰分析(ロジスティック回帰2)
(12) 11. 回帰分析(リッジ、ラッソ回帰)

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: