2022年1月7日金曜日

AIの中長期的なプラン

視力の問題でできる事に限りがあるなかで生きていく方法を模索しています。

AIデータサイエンスといった事を始めた矢先で混乱していますが、先ずはデータです。

手元にあるデータ若しくは今後必要に応じて取得するデータがあります。

それらを活用するにはデータを前処理(異常値や欠損データを補完する)事が必要になります。それらを自動で補完する事が必要になります。

Python等のプログラムもありますが、そこまで自分でするのは現状では無理です。

pycaretというものがありました。下手な素人よりは賢いですが、ハイパーパラメータの調整で多少は変わるようです。

Matlabにその様な機能がありまた各産業の実際のデータを使った事例もあるのでそれらも自社に近いデータを見つける事が出来れば効率的になります。

問題はソフトが複雑で数学や物理法則を理解しないと扱えないので習得に時間が掛かる。1日の時間もある程度制限しないといけません。

今後のこともあるので手順や失敗を記述しながら進めて行く事が必要です。

先ずは適当なサンプルを見つける、実践する(出来なければ途中経過を記述する)。

それらを積み重ねて行く事を始めてみようと思います。


 先ずはデータの前処理を勉強中です。社内のデータが欠損やカテゴリーデータの内容を正規化しないと使えないので調整しています。

少しはコードを工夫しないといけないのですが、ネットに色々と調べながら進めています。
YouTubeにも色々と勉強になる動画があるのでノートに書きながら目に負担にならない用に工夫しています。:;、()[]等が判別出来ないので疲れます。

2022年1月4日火曜日

AIを使った何か?例えば主成分分析

 機械学習は魔法ではなくデータを分類する手法です。

例えば身長が高ければ体重は重くなります。ある程度の人数のデータを機械学習して身長175cmの体重を予測する事は出来ます。精度を上げる為に性別や骨格の情報を追加していけばより良い予測ができる事は理解出来ると思います。その計算に右足と左足の長さをデータとして追加しても役に立たない事も理解出来そうです。それでは年齢を追加したらどうでしょう?

結局は追加して予測精度を調べるしかありません。

あるお店の外気温による飲み物の売上の予測はどうでしょうか?

気温が上がれば増えるでしょう。でも気温が30度を超えて40度になっても数量は増えないでしょう。それだけ気温が高いとそもそも外出しないでしょうし。逆に10度になってら減るでしょうか?

マイナス5度になれば売上はマイナスになるでしょうか?

機械学習はコンピューターを使うので計算式を入力する必要があります。

何が言いたいかと言うと社内の業務改善にAIを導入といった考え方ではなく、社内のデータを使って何をする為にどのデータが必要なのかを決めないとどうしようもありません。

最初に手法があると説明しましたが。身長から体重の予測や気温から飲み物の予測は線形回帰やロジスティック回帰、それ以外にも決定木、サポートベクターマシン、XGブースト…

数十種類の手法がありデータや予測したいものによって使い分けます。どれが最適か色々な手法を試す必要があります。

先ほどの左右の足の長さのように不要なデータで機械学習すると当然予測はおかしくなります。

私は知識をしてそれらを知っていますが、プログラムを実装した事はありません。それを始める前に手術してそれらを始める事ができていません。

仮に予測したいことがあれば調べて実装をしようと思いますが、いつまでに出来るかわかりません。

年末年始を利用して少しサンプルの実装していますが、データの前処理も大変です。

今は主成分分析をしています。

体重や身長、足の長さ、気温、性別等のデータの中から予測したい目的にどれほど影響しているかを数学的に分析する機械学習です。

との様に計算するかと言うとそれぞれの数値の平均と取得したデータの差を2乗してそれぞれのデータに相関関係がないかを分散共分散行列を求めて2、3種類までデータを絞る方法です。

それぞれのデータは目的に対して意味あるものであれが多くあれば予測精度が上がりますが研鑽コストも上がってしまします。その項目(説明変数)が使えるか使えないかを数学的に解く手法の一つです。




パイソンのコードです。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt



# In[2]:



df = pd.read_csv('titanic_train.csv')

df.head()



# In[3]:



df.info()   



# In[4]:



df['Age'] = df['Age'].fillna(df['Age'].mean())

df['Embarked'] = df['Embarked'].fillna(df['Embarked'].mode()[0])


df.info()



# In[5]:



X = df.drop(columns=['PassengerId', 'Survived', 'Name', 'Ticket', 'Cabin'])

y = df['Survived']


X.head()



# In[6]:



from sklearn.preprocessing import LabelEncoder


cat_features = ['Sex', 'Embarked']


for col in cat_features:

    lbl = LabelEncoder()

    X[col] = lbl.fit_transform(list(df[col].values))

    

X.head()



# In[7]:



from sklearn.preprocessing import StandardScaler


num_features = ['Age', 'Fare']


for col in num_features:

    scaler = StandardScaler()

    X[col] = scaler.fit_transform(np.array(df[col].values).reshape(-1, 1))

    

X.head()



# In[8]:



from sklearn.decomposition import PCA


pca = PCA()


X_pca = pca.fit_transform(X)

X_pca



# In[9]:



def plot_2d(X, y):

    plt.plot(X[:, 0][y==0], X[:, 1][y==0], "bo", ms=15)

    plt.plot(X[:, 0][y==1], X[:, 1][y==1], "r^", ms=15) 

    plt.xlabel("First Principal Component")

    plt.ylabel("Second Principal Component")

    plt.legend(['Not Survived', 'Survived'], loc="best")


plt.figure(figsize=(6, 6))

plot_2d(X_pca, y)

plt.show()



# In[10]:



import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from matplotlib.widgets import Slider

import numpy as np

get_ipython().run_line_magic('matplotlib', 'widget')

def plot_3d(X, y):

    fig = plt.figure(figsize=(6, 6))

    ax = fig.add_subplot(111, projection='3d')

    

    ax.plot(X[:, 0][y==0], X[:, 1][y==0], X[:, 2][y==0], "bo", ms=15)

    ax.plot(X[:, 0][y==1], X[:, 1][y==1], X[:, 2][y==1], "r^", ms=15)

    

    ax.set_xlabel("First Principal Component", fontsize=15)

    ax.set_ylabel("Second Principal Component", fontsize=15)

    ax.set_zlabel("Third Principal Component", fontsize=15)

    ax.legend(['Not Survived', 'Survived'], loc="best", fontsize=16)

    

plot_3d(X_pca, y)

plt.show()

2022年1月3日月曜日

新年明けましておめでとう御座います。

 まだまだ低空飛行です。歪んで見えるのも視野が欠けるのもまだ慣れません。

この状態で今から何をするのか試行錯誤中です。

先ずは気持ちのコントロールです。障害が無ければ気が向かない事でも気持ちを押して進めます。昨年は積極的に気が向かない事に挑戦しました。

この障害で何かを始めると必ず視力が問題になります。ネットや本で情報を得るにも見辛い事が影響します。そのせいで気持ちも落ち込みます。()と[]の違いが分からないのでプログラムの入力ミスも中々見つからず時間だけが過ぎて行きます。

社内の問題をAIで解決と言っても、何を予測するのかその為のデータがあるのか?

そもそもその予測が役に立つのか?を説明するのも実は大変です。

例えば来季の売上予測を出すとします。今までの売上データの推移からAIの手法を使って予測するとします。精度の高い予測であっても意味はないです。

何故かというと、その数字から何をすべきかが分からないからです。

今年は部品不足で今までの様に製品を売る事での売上増加は難しいと思います。これは競合他社も同じです。電源ICも少しですが供給が始まりまいたが、コロナのマスクの時と同じ混乱があると思います。その後ある程度で安定するのに時間が掛かると予想できます。

その間はある程度割り切って社内のシステムの変更に時間を掛ける方が良いのかもしれません。

AIを使っていませんが現在の部品不足で今年の生産量を予測が出来てそのために何をするかを議論して実行するのが予測の意味です。

今データ整理用のプログラムと機械学習の手法を勉強していますが苦戦中です。どれもそれほど簡単ではありません。データを取り出して集計して平均を出すだけではありません。

社内のデータを整理していますが、欠損値や半角と全角が混じっているので同じ会社や担当者の重複、同じ担当者の役職の変更で集計するのにも前処理をしないと使えません。

前処理のプログラムを作るのに試行錯誤しています。

その後のデータ処理にやっと機械学習をつかうのですが、数十種類の手法のどれを適用するのかを調べるにも文献を読む必要があります。その後そのコードを社内のデータ様に変更する必用があります。

その際、それぞれのデータの平均を取ってその差を2乗して足して別の要素の平均の2乗を足して掛けて割ってその微分から変化率を調べてそのデータの全体の影響を数値化してのの中から一番影響のある要素を集めて予測する。主成分分析のプログラムを触っています。

それがどの程度役に立つのかもわかりません。業務改善の一つの指標になると思いますが。

当初の目標はそれらの手法の習得に今年一年は掛かると考えていました。

次の報告ではその内容を書きます。

2021年12月26日日曜日

米国FLIR社の開発ページは会社合併により廃止された様です。

 

廃止されたページ。

このタイミングでコーンズテクノロジー社のブログに掲載されたのは偶然にしてはよく出来ています。

コーンズテクノロジーの関西電機工業の記事が掲載されたブログページ

今回関西電機工業の開発商品としてコーンズテクノロジーのオンラインショップにブレイクアウトボードも掲載されました。

大阪商工会議所、大阪工業大学とのアーリーアダプターコミュニティのプロジェクトの一部も同時に掲載してもらいました。
大阪工業大学の公式ページにも関西電機工業との取り組みの内容が掲載されています。

2021年12月17日金曜日

Matlabの制御工学

 制御工学もシミュレーションで確認すつのが普通でかなりの部分がコンピューター上で確認するのですが、当然ソフトの操作の理解や運動方程式や物理計算式の理解が出てきますがもう理解するのは限界を感じています。

現場で実践している人は自分でスクリプトを組んでどんどん最先端の技術を導入しています。

特に自動運転や自律ロボットはAIを組み入れて凄いことになっています。

ハードの計算能力や次々と新しいセンサーが出てきています。

ある程度基本的な部分はなんとか理解出来ますが、プログラムに関しては組み合わせがほぼ無限に存在する感じです。開発なのでそれぞれのエンジニアで独自の開発をしています。

コードを見ても理解不能です。

とりあえずMatlabを始めましたが、かなり高度はソフトです。通常の配列の扱いより行列の取り扱いに慣れる必要がありまた制御の為のコンポーネントの設定はサンプルを真似るくらいしか出来ない位に数学や物理の理解が必要です。

先ずは会社の太陽光発電量を可視化してそのデータから当日の晴れかそうでないかと予測して充放電をするソフトの解説を応用してみました。

CSVデータとMatlabに取り込んで欠損データを補完してスペクトルアナライザーに掛けてみました。Simuilinkという解析ソフトを使いました。

https://youtu.be/GTpP3Agz3L8

tabledataをx = double(Untitiled)と入力するも文法間違えでx = table2array(Untitled)にする様にと警告がでます。この際行列は行として入力されるので x = x(:)で列に変換
次にsolor = fillmissing(solor, 'previous')と入力して欠損データを補います。
Simulinkの乳力をt,solorに変えてGainを10に変更その結果はこの通り



これで会社の発電電力で晴れかそうでないかの判定が出来ました。

社内で電力量で判定出来るのでは?との事ですが、どの程度の間隔でどの閾値で判定するかを決めないといけません。過去のデータを一つ一つ調べる事は実質無理です。また天気予報を使うにしても確率をどう取るかです。一つ一つ閾値を決めるのはかなりの手間です。やってみれば分かります。

今回のDSPのスペクトルアナライザーなら25%閾値でローパスとハイパスのフィルターで12サンプル(3時間)でサンプルデータも会社のデータも見事に分ける事が出来たのでどこでも使えるモデルになっています。

今後蓄電池は増えて太陽光用の蓄電池システムも出来るでしょう。
このシステムなら基本の蓄電池のバッテリーマネジメント(過充電や過放電の機能があれば)太陽光にこのシステムのスイッチをつければシステムとしてはほぼ問題ないのではないでしょうか?



2021年12月7日火曜日

秋の散策

 大阪城の外堀を散歩して視力の違和感を感じながら物思いに耽っていました。

自然の風景は直線的なものは無くビルの窓や看板だけ歪んでみえます。

パソコンの画面を見ながらの仕事は辛く感じますが、ゆったりした時間の中だと歪みも少し許せるような気がしました。術後の目とこれから長い付き合いになるので仲良く過ごしていけたらと思います。まだまだ落ち込んだりする事はあると思いますが人生半分過ぎたのでいま残っているものを大事にしたいと思います。感度も悪く見づらい事もありますが労っていきます。

今までとても優しく励まして頂いている方々に感謝が気持ちが絶えません。まだまだへこたれている姿を見せると思いますが前を向いている姿をお見せ出来ればそれが、その方々への私のお返しになると思います。いつになるか分かりませんが見守って頂けると幸いです。


2021年11月11日木曜日

そもそもなんで電力予測?

 電力を予測したから電気代が下がるのではありません。

翌日の電力が多くなるもしくは少なくなることが分かればそれに対処して対策を取る事が出来ます。

それではスーパーのオーナーは電力を予測するより来店者数の予測や売上の予測の方が良いのでは?

その通りです。でも電気を扱う会社なので電力をメインにして予測をして行きます。

スーパーの電力が増えるという事はエアコン、冷蔵庫、冷凍庫の稼働が増えるという事になりますが、気温変化による電力を除けば来店者が増えてエアコンの出力が上がる若しくは冷蔵庫や冷凍庫の商品の出し入れが増えるという事は冷蔵冷凍食品の売り上げに相関関係が出る事になります。

その傾向がが分かれば電力予測で来店者数や商品の売り上げ予測もある程度は出来る事になります。

目的変数と説明変数が増えると解析が難しくなるので電力と何かの予測と言ったシンプルなものにしたいと思っています。

例えば電力消費と冷凍食品の販売量の相関みたいなものを考えて食品ロスを減らすといったものであればスーパーのオーナーだけでなく来店者(消費者)にも役に立つでしょう。

出来れば入力データと出力データもシンプルに予測出来る方法を考えます。

工場の電力予測はそれぞれの工場の製品によって目的変数も説明変数も変わってくるのでどの様に進めるかもこれから考えてみます。

単純な電力予測から出来そうか事をゆっくり煮詰めていく形になると思います。

電気代を減らすといった事だけでなくSDGsの様な環境負荷を減らす考え方に基づいた成果になる様に進めて行きます。