リハビリ 人工知能 理学療法 Deep learning Deep Neural Network ディープラーニング AI 鍼灸

人工知能・リハビリ・日記・理学療法

タイトルはAIですが、個人的な日記なので、あまり気になさらないように。

美女と筋肉の画像合成 #Python

どうもです。

洗濯をしている合間に書いています。

 

美女と筋肉の画像合成

夢の融合です。(すみません)

美女はこちら↓(フリー画像です)

f:id:Takuma_AI:20211001212040j:plain

 

筋肉はこちら↓

f:id:Takuma_AI:20211001212100j:plain

 

まずはインポート

import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

 

img1 = cv2.imread('muki.jpg')
img2 = cv2.imread('bijo.jpg')

img1.shape

img2.shape

 

img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)

img1 =cv2.resize(img1,(300,300))
img2 =cv2.resize(img2,(300,300))

 

blended = cv2.addWeighted(src1=img1,alpha=0.8,src2=img2,beta=0.3,gamma=0)
plt.imshow(blended)

 

筋肉有意の合成画像

f:id:Takuma_AI:20211001212302p:plain

 

筋肉が濃い。

 

美女有意の合成画像

f:id:Takuma_AI:20211001212328p:plain

 

なるほど。

 

以上。すみませんでした。

 

 

takuma-ai.hatenablog.com

 

心電図解説

<PT Exam Lab>

sinndennzu

心電図

 

P波

この波は,心房の興奮過程を示しています。
正常な場合には,まず右房が興奮した後に左房が興奮します。

 

QRS波

左右両心室筋の興奮を示す部分で,Q波の始めからS波の終わりまで。
正常な心臓では,心室筋の興奮は心室中隔の左室側から始まり,中隔右室側,右室, 左室,心尖部を経て,最後に心基部に向います。

 

T波

T波は収縮した心臓が元に戻るときにできる波です。陰性T波は通常は山型をしているT波が谷のようにへこんだ状態です。心筋梗塞、心筋症による心肥大、脳内出血などでみられる。

 

 

     

混同行列(2×2 分割表)のあれこれ。

どうも、たまには記事もかかないとサボり癖がついてしまいます。

パワプロでサボり癖がつくと良い選手がサクセスできません。

 

混同行列(2×2 分割表)のあれこれ。

混同行列というのは、2×2の分割表のことです。

こんな感じ↓

f:id:Takuma_AI:20210816173241p:plain

混同行列(Confusion Matrix)

この分割表から、感度やら特異度を計算するのですが、もうややこしいんですよ。今日は、もっとややこしくして差し上げます。(すみません。)

TP(真陽性) FN(偽陽性

FP(偽陰性) TN(真陰性)

 まず、これが大切です。

 

この、TP、FP、FN、TNから計算できる指標は数多くあります。

少し前にも取り上げました↓

takuma-ai.hatenablog.com

 

takuma-ai.hatenablog.com

 

これだけでも、ややこしいですが、他にも指標はありますよという話です。

 

精度(ACC)=(TP+TN)/(TP+TN+FN+FP)

 

エラー率(ERR)=(FP + FN)/(TP + TN + FN + FP)

 

感度(Sn, TPR, REC)=TP /(TP + FN)

 

特異度(Sp)=TN /(TN + FP)

 

偽陽性率(FPR)=FP /(TN + FP)

 

陽性的中率(PPV)=TP /(TP + FP)

 

MCC=(TP * TN-FP * FN)/((TP + FP)(TP + FN)(TN + FP)(TN + FN))1/2

 

ややこしいすぎませんか。

予測モデルの論文を読んで理解するためには、時間がかかりそうですね。

 

takuma-ai.hatenablog.com

 

takuma-ai.hatenablog.com

 

 

  

 

 

 

 

歩行データによるうつ病の検出???

 

 

 

どうも、お久しぶりです。

ちょっと変わった論文がありましたので、簡単にご紹介します。

 

Detecting Depression Through Gait Data: Examining the Contribution of Gait Features in Recognizing Depression

  2021; 12: 661213.

 

歩行データによるうつ病の検出:うつ病の認識における歩行機能の寄与の調査

 

・対象は121人の健康な方、126人のうつ病患者

Kinectという赤外線の装置を使って、歩行データ取得

・サポートベクトルマシン(機械学習)で分類

・精度は、AUCが0.93、感度0.94、特異度0.91

 

健康な方と、うつ病の方では歩行パターンに差があるという報告があります。しかし、精神心理的なご病気の方に対する歩行への着目度合いは乏しいのではないでしょうか?

 

takuma-ai.hatenablog.com

 

 

 

 

 

 

 

 

 

ランダムフォレストで音声分類してみた。Python

どうも、無料ブログなので広告が多いなと思い始めたんですけど、まぁ個人ブログなのでいいか。すみません。

 

ランダムフォレストで音声分類してみた。Python

正直、ランダムフォレストも音声分析もわからない方も多いと思います。

 

ランダムフォレストは、機械学習アルゴリズムのひとつで、決定木による複数の弱学習器を統合させて精度を向上させる、アンサンブル学習アルゴリズムです。

たぶん、これも意味不明ですよね。すみません

 

音声も、画像も、動画もすべて数値データです!!!!!!!!!

ということで、解析できないものはないですかね!?!? まぁいいか。

 

音声データは、.wavを使用しています。

mp3でも良かったのですがね。

 

import soundfile as sf
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

 

n_datas = ?
X =
y =

for i in range(1,n_datas):
men, _ = sf.read('Files/men_{}.wav'.format(i))
women, _ = sf.read('Files/women_{}.wav'.format(i))
no = no[:, 0]
yes = yes[:, 0]
X.append(men)
X.append(women)
y.append(0)
y.append(1)

X = np.array(X)
y = np.array(y)

X_fft = np.array([np.fft.fft(x) for x in X])
X_fft = np.fft.fft(X)
X = np.array([np.hstack*1

clf.fit(X, y)

 

 

男性と女性の音声分類をしました。

うまくコードが表示されない場合があるので、ほしい方はこちら↓

あんまり良いコードではないですが

www.dropbox.com

 

雑ですみません。

おすすめ書籍を載せます↓

 

 

 

 

*1:x.real**2+x.imag**2, np.arctan2(x.real, x.imag))) for x in X_fft])

clf = RandomForestClassifier()
scores = cross_val_score(clf, X, y, cv=3)
print('score:{:.3f} (+/-{:.3f})'.format(scores.mean(), scores.std()*2

○○の臀裂をエッジ検出してみた。Python

いきなりすみません。

 

 

○○の臀裂を検出してみた。

このタイトルに惹かれてきた方は、相当やばいです。

書いている方もよっぽどやばいですけどね。

 

臀裂を検出するのは、この画像!!!

f:id:Takuma_AI:20210531202536j:plain

もちろんフリー素材です。

 

エッジ検出というのは、微分でできます。

どうでもいいですよね。

 

import cv2

img = cv2.imread("path.jpg",0)

 

img_canny = cv2.Canny(img, 100, 200)
cv2.imshow("Canny",img_canny)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

前処理雑です。

f:id:Takuma_AI:20210531202629p:plain

 

はい。

 

”ぞう”なんて期待していませんよね。

 

一部の、男性が期待しているのは美女の臀裂でしょ。

フリー素材です。

f:id:Takuma_AI:20210531203145j:plain

 

f:id:Takuma_AI:20210531203159p:plain

 

なかなかのエッジ検出です。

 

結論:美女の臀裂は検出できる。

 

誰得。。。。

 

皆様、大変申し訳ございませんでした。

 

美人をフーリエ変換してみた。(空間周波数領域っていうのがあるんですよ。) - 人工知能・リハビリ・日記・理学療法

 

 

 

 

 

 

 

 

k-fold cross validation;k分割交差検証

どうも、コロナの感染力は本当に強いですね。そして、ワクチンは接種後の倦怠感はきつかった。いきなりのカミングアウトすみません。

 

 

k-fold cross validation;k-分割交差検証

私が知っているということは、皆様はもっと詳しいかもしれません。

 

k-fold cross validation;k分割交差検証とは

k分割交差検証は、訓練データセットを k 個のサブセットに分割して、そのうち kから、マイナス1 個のサブセットで学習して、残りの 1 個のサブセットで検証するという作業をすべての組み合わせに対して行う検証方法です。

 

堅苦しい

 

図で見ましょう↓

f:id:Takuma_AI:20210531114653p:plain

 

 

青い部分と検証データで予測モデルを作って、テストデータで予測モデルの精度の確認を行います。もちろん、テストデータは独立している必要がありますね。

 

また、分割した各サブセットデータも毎回ランダムになっては再現性がありません。random_stateを固定しましょう!!!!

 

kf = KFold(n_splits=5, shuffle=True, random_state=42)

 

そのほかの交差検証では、ホールドアウト法などがあります。

上記のものは正確にいうと組み合わせかもしれませんがね。

 

雑な記事でした。

 

 

Fire stick TVを使用したMac / iPhoneの画面拡張・ミラーリング ※無線です - 人工知能・リハビリ・日記・理学療法

 

 

 

 

 

  

Fire stick TVを使用したMac / iPhoneの画面拡張・ミラーリング ※無線です

どうも、電気コンセントの配置は重要ですよね。

いきなりすみません。

 

 

さて、前回はアンドロイドのスマホをFire stickに無線でミラーリングする方法をお伝えしました。

takuma-ai.hatenablog.com

 

 

今回は、Fire stick TVを使用してiPhone、または、Macbookを無線でテレビに出力したいと思います。

Fire Stickはこちら↓

 

 

Apple製品をFire stick TVに接続するには、305円のアプリが必要です。

 それがコレ↓、このアプリをFire stickにダウンロードしてください!

 

Amazon.co.jp: AirReceiver: Android アプリストア

 

正味、ただこれだけです。

そして、Fire stickを起動した状態で、iPhoneミラーリングボタンをおすだけ!!

f:id:Takuma_AI:20210522122921p:plain

 

ミラーリングボタンを押せば、あとは選択するのみ!!

f:id:Takuma_AI:20210522123022p:plain

 

 

Macの場合は、こちら↓

f:id:Takuma_AI:20210522123106p:plain

 

Macの場合は、ミラーリングだけでなく、画面の拡張もできますので2画面にもできます!!

 

これは、とても便利です!!!

 

 

 

 

F値を出してみた。Python

どうも、ワクチンの副反応が出ております。

Guchiです。いきなりのカミングアウトすみません。

 

 

F値を出してみた。Python

F値については↓

takuma-ai.hatenablog.com

 

診断精度(分類性能)を示すほうのF値です。

 

import numpy as np

 

input_matrix = [ [1000 , 1],[800, 1200]]

 

def calculation_f1(input_matrix):

confusion_matrix = np.array(input_matrix, dtype = 'float')

matrix_len = len(confusion_matrix)
col_sum = np.sum(confusion_matrix, axis=1)
row_sum = np.sum(confusion_matrix, axis=0)

F1_list = []

for i in range(0, matrix_len):
Precision = confusion_matrix[i][i] / (confusion_matrix[i][i] + (col_sum[i] - confusion_matrix[i][i]))
Recall = confusion_matrix[i][i] / (confusion_matrix[i][i] + (row_sum[i] - confusion_matrix[i][i]))
F1 = (2*Precision*Recall) / (Precision+Recall)
F1_list.append(F1)

return sum(F1_list)/matrix_len

print("F value: " + str(calculation_f1(input_matrix)))

 

結果↓ 

f:id:Takuma_AI:20210519102636p:plain

 

 

 

 

 

 

マシューズ相関係数は直感的ではなかったが保守的説。

どうも、すみません、まだまだ素人です。

 

 

いきなりのカミングアウトすみません!

 

マシューズ相関係数は直感的ではなかったが保守的説。

マシューズ相関係数;Matthews Correlation Coefficient (MCC)

 

まず、この指標はなんやねんと思った方も多いでしょう。私もそのうちの一人です。w 

ただ、最近の論文ではよく使用されています。

 

MCCは、混同行列のすべてのフィールドを評価して、分類器の偏りのない比較に適した尺度と見なされています。

MCCの参考文献はこちら↓

arxiv.org

 

混同行列の話や予測精度(F値)についてはこちら↓

F値は2つある?F statistics and F measure! - 人工知能・リハビリ・日記・理学療法

 

MCCは1から-1までの相関係数です。

1だと完璧な分類性能0は完全にランダムな分類性能-1は完全に逆の分類性能

 

計算して見ましょう。

MCCの計算式はこちら↓

f:id:Takuma_AI:20210504095307p:plain

 

さっそく、実際に計算。

まずは、インポート

import numpy as np
import pandas as pd

 

混同行列の各要素

N_TP = 15
N_FP = 1
N_FN = 2
N_TN = 10

 

混同行列

conf_MX = pd.DataFrame({"Positive":[N_TP,N_FN], "Negative":[N_FP,N_TN]},
    index=["Positive","Negative"])
print(conf_MX)

 

TP = [[1,1] for i in range(N_TP)]  
FP = [[1,0] for i in range(N_FP)]  
FN = [[0,1] for i in range(N_FN)] 
TN = [[0,0] for i in range(N_TN)]

 

df = pd.DataFrame(TP + FP + FN + TN, columns=["pred", "truth"])
print(df.head(5))

 

MCCを出して行きましょう!!!(一部、編集してください)

f:id:Takuma_AI:20210504142850p:plain

出力

print("MCC:" + str(mcc))

 

混同行列の結果

f:id:Takuma_AI:20210504092416p:plain

上記の数値だと、直感的にMCCも高くなりそうですよね。

 

マシューズ相関係数の結果

f:id:Takuma_AI:20210504092812p:plain

 


 

少し、混同行列の数字を変えてみましょう!!

 

こちらで計算↓

f:id:Takuma_AI:20210504095507p:plain

 

ちなみに感度は、非常に高いですよね。

MCCはどうでしょうか?

f:id:Takuma_AI:20210504095608p:plain

大分、下がりましたね。

 

感度が高くても、混同行列全体の分類能が悪くなればMCCは低下しますね。

感度の方が直感的ですが、MCCは分類能力は反映しそうです。

 

私の中では直感的ではないですが、保守的に考えてMCCが高いと、予測・分類精度が高いのかなという感じですね。

 

F値ですと、偏りがあった場合に、精度が高く見積もられたりすることがあります。

(例えば、感度は高いけど特異度が低い場合など)

 

医学的には、F値や感度・特異度の方が直感的でわかりやすいです。

 

MCCが高い場合は、ある意味安全なので、保守的な指標になりそうです。

(ちなみに、MCCは、ほぼピアソンの相関係数と同じです。)

 

 

  

 

 

 

動いているものだけ抽出、または消してみた。python

どうも、しょうもない記事を連続で書いております。

(論文書けって言われるかもしれません。)

まいどカミングアウトすみません。

 

動いているものだけ抽出、または消してみた。

下記は、ただクジラが動く動画です↓↓

youtu.be

 

 

動いているものを追いかけるただそれだけの動画↓

youtu.be

 

 

精度悪ーい!!!!!!

 

そして、動いていたゴムとクジラを消してみた。

f:id:Takuma_AI:20210423162515p:plain

 

もっとうまく消せましたが、エセっぽくなったので、こちら↑を乗せます。

まぁこんなアプリもあるでしょうが、試しにしてみました。

 

 

よく聞く正則化。やっぱり、普通はあまり聞かないかも

どうも、ナルガクルガの大剣、大刀、ボウガンを作りました。モンハンです。

いきなりのカミングアウトすみません。

 

正則化

f:id:Takuma_AI:20210423154334p:plain



 

正則化とは、なんぞやと思いますよ。病院で普通に勤務してれば出てこないワードです。もしかしたら、研究している方もあまり聞かないかもしれません。

 

 

正則化

機械学習モデルを学習するとき、過学習が発生するのを防ぐために行うようです。

 

めっちゃざっくり正則化の解説↓↓

過学習が発生しているときは、特定の入力値に対する係数が大きくなる傾向がありますが、正則化は、モデルの係数が大きいほど機械学習のモデルの係数をなるべく小さくしようとします。

 

正則化の方法の一つ前処理方として正規化などがあります。正規化にも複数種類がありますので、統計とかデータサイエンスって本当に難しいですよね。

 

 

動画を一秒づつ自動で画像にしてみた。

ハウスメーカーとの打ち合わせで、こだわりのなさがこだわりのGuchiです。いきなりのカミングアウトすみません。

(ネットの通信速度重視ですから。)

 

 

動画を一秒づつ自動で画像にしてみる。

まぁこれは別に、Pythonでしなくてもいいんですが、私の場合は、Pythonの方が楽に出来ます。

 

もしかしたら、家屋調査とかに使えるかもしれません。

(これでも、私は、一応、理学療法士の資格を持っている身なのでw)

 

すべて自動でできれば楽ですよね。働き方が自称データサイエンティスト+セラピストなのですが、リハビリ部内に一人くらい、私みたいな人が居てもいいかもしれません。

 

自意識過剰ですみません。

 

階層的に作っています。

 

f:id:Takuma_AI:20210420213317p:plain

 

OpenCVのインストールはこちら↓↓

pip install opencv-python

 

import cv2
from os import makedirs
from os.path import splitext, dirname, basename, join

 

def save_frames(video_path: str, frame_dir: str,
    name="image", ext="png"):
 cap = cv2.VideoCapture(video_path)
 if not cap.isOpened():
  return
 v_name = splitext(basename(video_path))[0]
 if frame_dir[-1:] == "\\" or frame_dir[-1:] == "/":
  frame_dir = dirname(frame_dir)
 frame_dir_ = join(frame_dir, v_name)

 makedirs(frame_dir_, exist_ok=True)
 base_path = join(frame_dir_, name)

 idx = 0
 while cap.isOpened():
  idx += 1
 ret, frame = cap.read()
 if ret:
if cap.get(cv2.CAP_PROP_POS_FRAMES) == 1:
  cv2.imwrite("{}_{}.{}".format(base_path, "0000", ext),
frame)
 elif idx < cap.get(cv2.CAP_PROP_FPS):
  continue
 else: #
  second =     int(cap.get(cv2.CAP_PROP_POS_FRAMES)/idx)
  filled_second = str(second).zfill(4)
  cv2.imwrite("{}_{}.{}".format(base_path,   filled_second, ext),
  frame)
  idx = 0
 else:
  break

save_frames("movie_path", ".//folder_path")

 

なんかややこしいけど、できやした。

 

明日も仕事です。頑張りましょう。

 

最近、Rに触れてないなー。

 

今度、R系のしょうもない記事を書いてみます。

 

      

 

 

 

 

 

前回の記事↓

takuma-ai.hatenablog.com

 

意思決定曲線分析関連↓

takuma-ai.hatenablog.com

 

takuma-ai.hatenablog.com