2018-07-10

R で主成分分析 (1)

PCA, Principal Component Analysis(主成分分析)は、線形独立であるか自明でない多数の変数を、ばらつきが大きい順から線形独立な主成分 (PC, Principal Component ) と呼ばれる変数に変換(合成)します。データの次元を削減するために用いられます。

次元が削減されてなにが嬉しいかというと、それは、多数の変数=多次元の情報を、少ない次元で端的に表現できるということです。主成分はデータのばらつき=変動の大きい順に PC1, PC2, ... と変換されています。そのため、主成分のいくつかだけでデータのふるまい(特徴)を概ね説明できてしまう場合があります。

最近、PCA を駆使して何百、何千という変数を持つデータの解析をする業務が多くなりました。社内とは言え、他人が開発をしたシステムを使っているので、いざとなれば自力である程度検証できるようにしておかなければなりません。

ということで、簡単なデータを使って R で主成分分析をしてみます。

iris データの解析

R に組み込まれているデータセット iris を使って主成分分析をしてみます。sepal は花びらの「がく」、petal は「花弁」のことで、それぞれ長さと幅を測定したデータが並んでいます。また species は「種」で、アヤメ属 (iris) の花 setosa, versicolor, virginica の三種類あります。

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> unique(iris$Species)
[1] setosa     versicolor virginica 
Levels: setosa versicolor virginica
> 

そこで、この三種類の花がどのような特徴を持っているか調べてみることにします。「種」を除けば変数が4つしかないので「がく」と「花弁」の長さと幅をボックスプロットで比較する方法と、同じ方法で主成分分析を使うとどのようになるかを比較してみます。

R スクリプト

本記事で使用したスクリプトを以下に示しました。このスクリプトでは ggplot2 と qcc の二つのパッケージを利用しています。お使いの環境にインストールされていなければ、install.packages('ggplot2') のようにしてインストールしてください。

library(ggplot2)
library(qcc)
# GLOBAL
theme_default <- theme(panel.background = element_blank(),
                       panel.border = element_rect(fill = NA),
                       panel.grid.major = element_blank(),
                       panel.grid.minor = element_blank(),
                       strip.background = element_blank(),
                       axis.text.x = element_text(colour = "black"),
                       axis.text.y = element_text(colour = "black"),
                       axis.ticks = element_line(colour = "black"),
                       plot.margin = unit(c(1, 1, 1, 1), "line"))
# -----------------------------------------------------------------------------
#  myboxplot
# -----------------------------------------------------------------------------
myboxplot <- function(pp, ymin, ymax) {
  pp <- pp + geom_boxplot()
  pp <- pp + scale_y_continuous(limits = c(ymin, ymax))
  pp <- pp + theme_default
  return(pp)
}
# -----------------------------------------------------------------------------
#  BOXPLOT for RAW DATA
# -----------------------------------------------------------------------------
df <- as.data.frame(iris)
#
y.min <- min(df[, 1:4])
y.max <- max(df[, 1:4])
# -----------------------------------------------------------------------------
# Sepal.Length
p <- ggplot(df, aes(x = Species, y = Sepal.Length))
p <- myboxplot(p, y.min, y.max)
plot(p)
# Sepal.Width
p <- ggplot(df, aes(x = Species, y = Sepal.Width))
p <- myboxplot(p, y.min, y.max)
plot(p)
# Petal.Length
p <- ggplot(df, aes(x = Species, y = Petal.Length))
p <- myboxplot(p, y.min, y.max)
plot(p)
# Petal.Width
p <- ggplot(df, aes(x = Species, y = Petal.Width))
p <- myboxplot(p, y.min, y.max)
plot(p)
# -----------------------------------------------------------------------------
#  BOXPLOT for PCA DATA
# -----------------------------------------------------------------------------
df <- as.data.frame(iris)
row.names(df) <- paste(df$Species, row.names(df), sep="_") 
df$Species <- NULL
# PCA
df_pca <- prcomp(df)
df_out <- as.data.frame(df_pca$x)
df_out$Species <- sapply(strsplit(as.character(row.names(df)), "_"), "[[", 1)
#
y.min <- min(df_out[, 1:4])
y.max <- max(df_out[, 1:4])
# -----------------------------------------------------------------------------
# PC1
p <- ggplot(df_out, aes(x = Species, y = PC1))
p <- myboxplot(p, y.min, y.max)
plot(p)
# PC2
p <- ggplot(df_out, aes(x = Species, y = PC2))
p <- myboxplot(p, y.min, y.max)
plot(p)
# PC3
p <- ggplot(df_out, aes(x = Species, y = PC3))
p <- myboxplot(p, y.min, y.max)
plot(p)
# PC4
p <- ggplot(df_out, aes(x = Species, y = PC4))
p <- myboxplot(p, y.min, y.max)
plot(p)
# Pareto Chart
PCA <- df_pca$sdev
names(PCA) <- c("PC1", "PC2", "PC3", "PC4")
pareto <- pareto.chart(PCA, ylab = "Variation")
plot(pareto)

生データのボックスプロット

以下に、「がく」と「花弁」の長さと幅について、「種」別に描画したボックスプロットを示しました。議論が分かれるところですが、ここでは全体を比較するため縦軸のスケールを揃えてあります。

これらのボックスプロットをじ〜っと見較べて判る差異を以下にまとめました。

  • 「がく」と「花弁」の大きさは、概ね setosa, versicolor, virsinica の順に大きい。
  • 「花弁 (petal)」の長さの差異が、他の数値に比べて際立っている。
  • 「がく (sepal)」の幅の差異が、他の差異に比べて小さい。

主成分分析後のボックスプロット

「がく」と「花弁」の長さと幅について、prcomp で主成分分析をして、主成分を「種」別に描画したボックスプロットを示しました。生データのボックスプロットの時と同様に、全体を比較するため縦軸のスケールを揃えてあります。

主成分のばらつき(変動)の大きさをパレート図にしたものを下記に示しました。

パレート図の内訳をみると、主成分 PC1 と PC2 で全体の変動の 80% 以上を説明できている事がわかります。

> pareto
     
Pareto chart analysis for PCA
        Frequency   Cum.Freq.  Percentage Cum.Percent.
  PC1   2.0562689   2.0562689  68.9345126   68.9345126
  PC2   0.4926162   2.5488851  16.5145035   85.4490161
  PC3   0.2796596   2.8285447   9.3753300   94.8243460
  PC4   0.1543862   2.9829309   5.1756540  100.0000000
> 

参考サイト

  1. irisの正体 (R Advent Calendar 2012 6日目) - どんな鳥も
  2. R plot PCA using ggplot2 - Boqiang Hu

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-07-07

才能の枯渇はまだ、いや、あればだけど…

最近忙しいから疲れているのかな?独り言を書きたくなりました。

転職して職場が変わっても、その業界にいる限り、昔の同僚や先輩後輩に出くわすことがある。

「何だかんだ言ってもまだ半導体業界にいます。」と、かつてお世話になった先輩に某顧客の工場の喫煙室で挨拶をしたとき、「半導体業界以外に移る必要がなぜある?」と返され、返事ができなかった。

週の大半が出張の毎日。ホテルから出張先へ向う時間調整で、毎日ではないのだけれど NHK の朝の連続テレビ小説を観るようになってしまった。今放映している「半分、青い。」で、主人公が伸びない才能に諦めをつけて漫画家をやめる決意をする段階にさしかっている(第13週 仕事が欲しい 6月25日(月)~6月30日(土)放送)。この場面に心がチクチクする。いや主人公にではない、自分にである。

漫画家に限らず、プロの仕事であればなんでも「才能」が必要とされる。自分は転職を重ねたけど、半導体業界の片隅でエンジニアとしてまだなんとかやっている。でも50歳半ばになり、年寄り臭く過去を振り返ることが多くなってしまった。一体自分が一番輝いていたのはいつだったのだろうかと。いや、過去を振り返っても仕方がないことなのだが、最近では才能ある若い世代をとても羨しく思うようになっている自分に気付く。

若い頃は負けるものかと、自分も切磋琢磨を続けて、自分ができないことをする同僚に追いつくことを目指したものだ。今は聞き分けが良い年嵩の同僚に成り下がってしまったようだ。もちろん少しでもキャッチアップしようと、知らなかった技術を仕入れて悪あがきをしているのではあるが…。

前述の番組でナレーターは、「才能が枯渇する」というような表現で主人公の状況を言い表したが、それは創造力を必要とする分野の仕事では致命的な事なのだろう。若い時に自分の才能の限界に気がついてしまったら、漫画家のような職業だともう廃業するしかない。そんな漫画家の「作品」はもはや読者に受け入れられるわけがないからだ。

幸い、エンジニアという職業はそうでもない。それは技術の蓄積の上に成り立っている仕事であるからだ。もちろん創造力を必要とする部分はあるが全てではない。きらきらと光り輝く才能が無くともなんとかやっていける。だから諦めきれずに悪あがきができる。

大学を卒業後、半導体プロセスエンジニアとしてキャリアをスタートした自分は、担当のドライエッチングプロセスの実験に熱中し、夜遅くまで SEM 室でエッチングしたサンプルの断面を観察していたものだ。日常的にプロセスの改善に明け暮れる中で DOESPC を駆使するにつれて統計解析を扱う仕事が増え、昨今 FDCVM に取り組むに至っては、半端ない量の多変量変数を扱うために機械学習の知識が必要になってきた。同じ場所、仕事に留まるとテクノロジーのトレンドから取り残される。だから新しい知識を習得するための努力は続く。

人生百年と言えど、職業人生はとっくに折り返し地点を超えてゴールを意識する歳になってしまった。そろそろラストスパートだ。

参考サイト

  1. NHK連続テレビ小説『半分、青い。』

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-06-22

いまどきの GNOME デスクトップ

デスクトップを選択できない悲劇

2012 年 8 月から 10 月にかけてリリースされた Windows 8 は、従来の Windows デスクトップのユーザーインターフェイスを、タブレット端末などで画面をタッチして操作することを強く意識したスタイルに大きく変貌させました(右図:Windows 8 - Wikipedia より引用)。

このユーザーインターフェイスの変更は、従前のデスクトップ PC からタブレット端末へコンピュータの主流が移っていくと趨勢を見極め、Microsoft 社が打った布石の一つなのだと、その時は思いました。一個人としてはその後の普及を期待して見守っていたのですが…。

一年後の 2013 年 10 月にリリースされた Windows 8. 1 では Windows の「スタート」ボタンが復活し、その後 2015 年 7 月末にリリースされた Windows 10 に至っては Windows 7 までのスタイルと Windows 8/8.1 のスタイルを統合させた折衷案のようなユーザーインターフェイスに後退してしまったように見えます。

この後退は多くのユーザーが Windows 8 のユーザーインターフェイスに追従できなかったからだと、Windows 10 が登場した当時は考えていました。タブレット端末に限って言えば、Windows 8 のユーザーインターフェイスは決して悪くないと思います。でも、デスクトップ PC で日々取り組む業務においては、ユーザーインターフェイスの変更は迷惑なだけかもしれません。そう、Windows にはデスクトップ選択の自由がほとんど無かったことが Windows 8 の不人気を生む一因になっていたように思うのです。もちろん、選択できるようにすることで生じる弊害もあります。

デスクトップを選択できる自由が生む多様性

一方、Linux ではデスクトップを自由に選択できます。Linux ディストリビューションによっては、インストールするユーザーの利便性を考慮して、デスクトップ環境毎にインストールイメージを提供する場合があります。ですが、インストール後であっても、デスクトップ環境を変更することは可能です。

選択の自由がユーザーの側にあるということはユーザーにとっては良いことです。しかし、その自由さは選択の多様性を生じます。多様であるために、それを「複雑」だとか「難しい」と感じる個人がいたり、あるいは標準化したオペレーションを実現したい業務分野において Linux の普及を妨げているという側面もあります。でも「カスタマイズされた専用端末を業務で使っているが、その端末の OS は Linux だった」なんてことも十分にあり得るので、Linux の普及について一個人が心配しても仕方がないことです。

GNOME のたどった進化

1999 年にバージョン 1.0 がリリースされた GNOME (/(ɡ)noʊm/) デスクトップ環境は、かつては無数にある Linux ディストリビューションにおいて標準的なデスクトップとして扱われた時期がありました。現行の GNOME 3.x 系デスクトップの最初のバージョン 3.0 がリリースされたのは 2011 年 4 月のことですから、(憶測にすぎませんが)Windows 8 の開発動向を意識して新しいデスクトップの開発をしていたのでしょう。GNOME 3 でも Windows 8 より一足早くタッチパネルでの利用を意識したユーザーインターフェイスに一新されたのです。

GNOME 2.0 (左)と GNOME 3.x(右)(GNOME - Wikipedia より引用)

GNOME 3 はこの変更により多くの批判を Linux ユーザーから受けました。GNOME 3 のデスクトップを受け入れられない人たちは、従来の GNOME 2 のデスクトップ環境を継続させるためにさせるために GNOME 2.x をフォークして MATE (/ˈmate/)と命名したプロジェクトや、GNOME 3 をベースにした Cinnamon という新しいいデスクトッププロジェクトが立ち上がりました。

自分も最初しばらく GNOME 3 を使ってみましたが、グラフィック関係のデバイスを強化せずありふれた CPU を搭載したデスクトップ PC では、動作がもたついてストレスを感じたため、軽量デスクトップへの変更を余儀なくされました。そんなわけで、GNOME 3 が Fedora のデフォルトのデスクトップになってしばらくは、もっぱら LXDE のデスクトップ環境に変更して利用していました。MATE や Xfce も試しました。

LXDE(LXDE - Wikipedia より引用)

ある程度の性能を持った 10 万円を超える PC を買っても、その程度の性能はすぐに陳腐化します。しかし貧乏性の私は 10 万円以上の PC を買ってしまったら、買い換えずに何年も使おうとします。そうすると、トレンドから取り残されてしまっているという意味のない焦燥感に苛まれながら使い続けることになります。つまらない悪循環です。

そもそも PC に費やす資金が潤沢ではないので、近年はターゲットとする PC を変更しました。性能は低いけど割り切って買い替えができる格安 PC をターゲットにして Linux をインストールすることに精を出しています。そして、常用するデスクトップ環境は GNOME 3 に戻っています。

GNOME 3 に回帰した最大の理由は、格安 PC で GNOME 3 デスクトップ環境を使っていても、さほどストレスを感じなくなったことだと思っています。もちろん Fedora に関する記事を書く時はデフォルトの GNOME でスクリーンショットを取った方が良いだろうという意識も働いていますし、ストレージの容量に余裕がない格安 PC で、いくつものデスクトップ環境を選択できるようにインストールしておくのは不経済だという理由もあります。

GPD Pocket / Fedora 28 で利用している GNOME 3 のデスクトップ

そんなわけで、出張中も携行している愛用の GPD Pocket では、Windows を使わずに Fedora をインストールして、最初から GNOME 3 をデスクトップにして使っています。GPD Pocket のスクリーンはタッチパネルになっていますが、キーボードを分離できるタイプではないのでタブレットのような使い方ができません。ですのでわざわざ指紋で画面を汚すようなマネををせず、もっぱらマウスで操作しています。

このように GNOME 3 で積極的にタブレット的な使い方をしていませんが、操作に慣れてきたせいなのか、それともじわりと GNOME 3 が改善されてきて操作性が良くなっているためなのか、特に不満なく使っています。

使いたいデスクトップを利用できる自由

Linux ユーザーが Windows 風のデスクトップを利用したければ、そういうデスクトップ環境を利用すれば良いのです。それはユーザーの自由なのです。たとえば参考サイト [2] では主要なデスクトップ環境に対して、様々なデスクトップテーマを入手することができます。

キーボードとマウスを使う PC の用途が依然として残る中、タブレット端末のようにキーボードやマウスを使わない用途がどんどん増えています。家電量販店の PC コーナーでは、こういったタブレット端末がその一角を占めています。こういったタブレット端末に搭載されている OS は Android や iOS が主流です。持ち歩く用途ではタブレット端末、卓上ではキーボードやマウスを使って作業をする。Linux ユーザーであれば、GNOME 3 のデスクトップ環境はどちらの用途にもピッタリだと思います。最近は、Linux をインストールして遊べそうな格安のタブレットを探す毎日です。

参考サイト

  1. 本の虫: リーナス・トーバルズ、GNOME3に戻る
  2. opendesktop.org
  3. 個人のネット利用、スマホがPCを上回る 総務省が調査 - ITmedia NEWS [2018-05-25]

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-06-16

Linux ディストロ探訪(4) 〜 Linux Mint 〜

Linux とは本来 Linux カーネルのことを指しています。しかし、カーネルだけでは OS として動作させることはできません。そこで、OS に関連するツールやアプリケーションなどをまとめて、インストールし易く、インストール後にすぐ利用できるような配布形態にしたものを「ディストリビューション(略してディストロ)」と呼んでいます。

本シリーズ記事は、Linux ディストリビューションをピックアップ、仮想マシン(あるいは実機)にインストールして紹介します[不定期]。

Linux Mint とは

Linux Mint は、強力かつ簡単に利用できる、現代的でエレガントそして快適なオペレーティングシステム作りを目的としているディストリビューションで、Ubuntu をベースにしています。2006 年にバージョン 1 がリリースされています。また、その後 Debian をベースとしたエディション、LMDE, Linux Mint Debian Edtion もリリースされています。

プロジェクトサイトの説明 [1] によると、Linux Mint はデスクトップ用途の Linux ディストリビューションでは最もポピュラーであると主張されています。そうである理由として、次の5点を挙げています。

  1. インストール後、設定などの作業がほとんどせずにマルチメディアを含めてすぐに使える手軽さ
  2. 無料かつオープンソースであること
  3. コミュニティ主導のプロジェクトであるため、ユーザーからのフィードバックが Linux Mint の改善に結びつく
  4. Debian と Ubuntu をベースにしているため、30,000 以上のパッケージと最良のソフトウェア管理
  5. 安全性と信頼性
    • ソフトウェアの更新に対する保守的なアプローチ、独自のアップデートマネージャーおよび Linux の構造からくるオペレーションシステムそのものの堅牢さ、これらのおかげで、Linux Mint では、リグレッションテスト、アンチウィルス、アンチスパイウェアなどのためのメンテナンスがほとんど不要。

デスクトップ用途に利用できる Linux のディストリビューションであれば、上に挙げた内容はどれも似たり寄ったりだとは思うのですが、1. のインストールのしやすさや、すぐに使えるかどうかは、ディストリビューションによって差が出やすい項目です。

そこで、インストール後に、日本語入力ができるようになるまでとマルチメディアなどの機能に対応しているかを特に注視してみたいと思います。

対象の Linux Mint のバージョンは、この記事を準備している時点で最新の Linux Mint 19 Tara(ベータ版)です。以下の三種類のデスクトップエディションがあるのですが、ここでは Cinnamon Edition を試してみることにします。

Linux Mint 19 のベータ版に KDE Edtion がありませんでしたが、単にまだリリースできる段階になかっただけなのかもしれません。

仮想環境へインストール

ダウンロードした Linux Mint (Cinnamon Edition) の ISO 形式のイメージ linuxmint-19-cinnamon-64bit-beta.iso を仮想環境 GNOME Boxes で読み込むと、Live 版の Linux Mint が起動します。

Live 起動した Linux Mint 19 (Cinnamon Edition)

Cinnamon はビデオ・ハードウェア・アクセラレータを必要とするデスクトップ環境であるため、ソフトウェアで機能をエミュレートして CPU に負荷がかかるという警告が画面右上に表示されます。ここでは動作が遅くなることを許容してこのウィンドウを閉じておきます。

デスクトップ左側に表示されている Install Linux Mint のアイコンをダブルクリックして、インストーラを起動します。インストールの流れは以下のようになります。

まず、インストール時の言語を設定します。

次にインストール前に必要な設定をします。

設定が終わるとインストールが始まります。

しばらくするとインストールが終了しますので再起動します。

メディアを取り出してから ENTER を押して再起動するようにメッセージが出ますが、ここでは仮想環境なのでこのまま ENTER を押します。

Linux Mint が起動し、ログインすると日本語で初期画面「Linux Mint へようこそ」が表示されます。

日本語入力の設定

インストール時の設定で日本語のメッセージは表示されますが、入力メソッドまでは設定されません。メニューから「設定」→「言語」を選択して入力メソッドの設定をします。

言語設定(「設定」→「言語」)

「入力方法」のタブ画面で、下段の「言語サポート」の枠内の日本語の「インストール」ボタンをクリックします。

すると必要な言語サポート・パッケージがインストールされて日本語の入力メソッドが利用できるようなります。ここでは入力メソッド(上段の「入力方法」の枠内)に IBus を選択しています。

念の為、再起動してから、ひらがなの入力、漢字の変換ができることを確認しました。

日本語入力をできるようにするのに、ひと手間かかりますが、やり方さえ判っていれば簡単に設定が出来ます。

実機へインストール

仮想環境へは難なくインストール出来ましたので、実機にもインストールしてみました。

Fedora Media Writer で USB メモリに起動イメージを作成し、テスト機に使用している HP Stream 11-r016TU にインストールしました。この PC は Celeron N2840 という 2014 年後半に出回り始めた 22nm 世代の、主にタブレットや格安 PC に採用された CPU を搭載しています。

はっきり言って、かなり控えめな性能の CPU ではありますが、第7世代 Intel HD Graphics を内蔵しています。ゲーム用途に使えるほど高性能なグラフィックスではありませんが、Cinnamon デスクトップ環境に対応できる性能のようです。仮想環境で Linux Mint を試した時のような警告メッセージは表示されませんでした。

「設定」→「システム情報」
Linux Mint 19 Cinnamon on HP Stream 11-r016TU

ざっとハードウェアの機能を確認しましたが、下記の項目に付いては特に問題がありませんでした。

  • USB ✔
  • WiFi ✔
  • オーディオ関係 ✔
  • Bluetooth ✔
  • カメラ ✔

まとめ

項目 説明
ディストリビューション Linux Mint
プロジェクトサイト https://linuxmint.com/
デスクトップ環境 Cinnamon, MATE, Xfce, KDE
パッケージ形式 deb(管理ツール APT)、アップデートマネージャ mintUpdate
日本語入力 ibus-mozc, fcitx-mozc
特記事項

Ubuntu をベースとしている Linux Mint は、Ubuntu のソフトウェアリポジトリも使用しています。そのため、ほとんどのパッケージは両ディストリビューションで同じであり、二つのシステムはほとんど同じように振る舞います。

寸評
  • Linux Mint 13 Maya(2012年)以降に選択できるようになったデスクトップ環境 Cinnamon は非常にセンスの良い魅力的なデザインだと感じ、日本語環境が整えば使ってみたいディストロだと思っていました。しかし、Fedora など他のディストリビューションでも Cinnamon を利用できるようになり、Linux Mint への興味が無くなってしまいました。
  • 今回、評価目的で Linux Mint をインストールしましたが、やはり Cinammon のデザインはセンスが良いと感じました。当然ですがデザインが Linux Mint 用に設定されているため、インストール後すぐに統一感のある Cinnamon のデスクトップ環境を体験できます。
  • Linux をデスクトップ用途に使いたい方には、手軽にインストールできて、センスの良いデスクトップをすぐに使える Linux Mint Cinnamon Edition はオススメのディストロです。

参考サイト

  1. About - Linux Mint

 

ブログランキング・にほんブログ村へ
にほんブログ村