ChatGPTにベーシックインカムについてきいてみた
Q:多くの人間の生産活動がAIで補完されたのちに、できるだけ多くの人間が幸福になる社会の一環としてベーシックインカムを提案する人がいます。ChatGPTは現在の経済社会とベーシックインカム導入はどちらが多くの人間を幸せにできると考えていますか?
A: ChatGPTは、現在の経済社会とベーシックインカム導入の両方にメリットとデメリットがあると考えています。
現在の経済社会では、労働力市場においては、労働者が自己責任で収入を得ることが求められます。しかしながら、高度に技術化された現代の産業において、AIやロボットなどの技術が進化することで、労働市場における人間の役割は相対的に減少する可能性があります。その結果、収入を得る機会が減少する可能性があり、社会の不平等が拡大する可能性があります。
一方、ベーシックインカムの導入は、収入が減少する可能性のある人々を支援し、より公平な社会を実現するために役立つことができます。また、ベーシックインカムによって、人々はより自由に生きることができ、自分の好きなことに時間を費やすことができます。これにより、社会全体のクリエイティビティや創造性が促進される可能性があります。
しかし、ベーシックインカムの導入には財源や社会の価値観などの問題があります。また、ベーシックインカムの導入によって、人々が働く意欲が低下する可能性もあります。
結論として、ChatGPTは、現在の経済社会とベーシックインカムの導入の両方にメリットとデメリットがあると考えています。そのため、どちらがより多くの人々を幸福にできるかは、社会の価値観や財源などの様々な要因によって異なるため、決定するには慎重な検討が必要です。
Jupyter Widget で心拍数グラフ表示と3回分の心拍数平均計算
だんだん頭にやりたいことが形になってきた。これがプログラミングのだいご味ではないか。
とくに、Jupyter Widgetは前々から興味があって今回初めて手を出してみたが、「ちょうどいい」使い勝手。 以前TKinterなども使っていたのだが、Debug作業などがなんとなくめんどくさかったり、微妙な感触だったが、Jupyter Widgetはブラウザ表示の制約がある中でシンプルかつ、即時Debugができるのが自分好み。自分の使い方では全然これでよい。
そして今回3回分の心拍数測定記録の平均値を出してグラフにする、というタスクがPandasの基本的操作の練習になった。 複数のDateFrameの結合、欠損値保管、ソート、平均値などなど。
点線で個別の心拍数値を表示させると、見事に平均がとれていることがわかる。大成功。なんだこれ超楽しい。
BSW Comp 1
早速、Garminのデータをエクスポートして心拍数を表示してみた。
自分的にはまあまあ強めの強度でこぎ切った感じがあるのだが、心拍データのほうは120-140ぐらいをキープして、まあちょうどいっちゃあちょうどよいレベル。。。 30分のあたりがDoubleTimeのTap it back, 最後が高速でStanding Double Timeと思われ、高い値を記録している。
- Zone0 -94 2%
- Zone1 95-112 27%
- Zone2 113-132 40%
- Zone3 133-151 27%
- Zone4 151-169 2%
- Zone5 170- 0%
POINT: 217
ざっくり、以上のようなレンジで強度を分けて(このレンジは他人の(高機能?)ガーミンのキャプチャデータより流用)それぞれポイントを分数でかけてみた。
- Zone0: 0 point/min,
- Zone1: 4 point/min
- Zone2: 5 point/min
- Zone3: 6 point/min
- Zone4: 7 point/min
- Zone5: 8 point/min
まだまだデータとかとっ散らかっているし、そもそもGarmingの測定自体も怪しい時がある。(BSBなどPush Up系で計測がうまくできなくなる?)試行錯誤でデータを取れるようにしておき、記録してのちほど比較できるようにしておきたい。
FeelCycleの履歴をデータ化してみる
FeelCycleというフィットネスに通って8年以上たった。いわゆる「暗闇バイク」として有名な室内バイクジムで、プログラムごとにきまった音楽を流し、一回45分単位で、決まった動きをインストラクターの指示で行うジムだ。
キラキラ・ポジティブ系の印象が強いところだが、私自身は比較的ストイックにやっているつもり。ほかの運動が長続きしなかったのだが、音楽のリズムに合わせて動くというスタイルが性に合ったのか続いている。この8年、環境な変化だったりそれこそコロナなどもありながら続けられているのはきっとばっちりあっていたということなのだろう。
うんで、Garmingのスマートウォッチで心拍のデータをとれたのでそれを使ってグラフとかとりたいなーとか思っていたのだが、その下準備でいままでの受講データをまとめられたので、それをいったん出してみたいと思います。
月ごとの受講回数
- [2015.3-2017.3] 入ってすぐドはまりしているのがわかる。ひと月30回受けているのもあって、どうやってそんな回数取ったのか今では覚えていないが、とにかく朝活していた。
- [2017.4-2020.3] 脱臼癖の手術(当ブログで報告)のため、一旦休会をおこなう。その間に所属スタジオが閉鎖。復帰をするも、奥様の妊娠・出産とイベントづくめ。特に子供ができたので激しい朝活はできなくなり、時間の取り方を試行錯誤しながらも断続的に続けていた。
- [2020.4-2021.11] 少しづつ、参加できるペースをつかめてきたタイミングで、コロナ渦に突入。スタジオの閉鎖が解除後もしばらくは参加せず。感染者数が下がって少しづつ参加しようかと思うと次の波がおこりまた離れるの繰り返し。。。
- [2021.12-2022.5] ワクチン打ったし、もういいかと大分緩んでくる。またペースをつかみつつあり、月10回以上ぐらいのペースをキープ。
というわけでフィットネスジムのたかが出席データではあるのですが、人生のイベントを振り返ることもできてなかなか面白いです。 この後、プログラム別の参加実績など、データの可視化をしていきますが、全部のデータを使うパターンのほか、データのバランスを考えて休会復帰後(2017年10月以降)からのデータで比較してみます。というのも前半の狂ったように通っていたデータの数が多くて、古い時期のデータに偏ってしまうのを排除した結果をみてみたかったからです。
プログラム大別 受講割合
プログラムは大別すると、運動のきつさごとにBB1(入門)、BB2(ベース), BB3(高強度)というように分かれている。さらに負荷を与える部位に特化したプログラムもありBSB(腕、背中)、BSW(腹)、BSL(足腰)というのもある。ジム側が提供するプログラムが圧倒的にBB2が多く、ついで、BB1、部位系で、BB3はとても少ない。そのためBB3は狙って予約しないとなかなかとれない。参加できる時間で決めている自分としては自然と、BB2、BSB、BSW、BSLが多くなる。この割合は全体を通しても休会後も変わらないようだ。
受講プログラム 詳細
プログラムを個別にみてみました。大別のカラーリングごとに棒の色も変更してみました。こうして比べてみると、やはり前半の狂受講機の影響を除くとだいぶ内容が変わっていることがわかります。特にプログラムは提供停止になるものもあるので、受けたくても受けられない、みたいのも結構あります😌 お気に入りのBSW SoulとかBB2 HH1とかが総じて上にありますが、トータルでみるとBB2 House2が一番受けていたみたいです。
まとめ
今回の情報まとめで8年間の受講傾向をみることができました。この背景を頭にいれつつGarminの心拍データをいじってみたいと思っています。
04_サポートベクトルマシン 05_サポートベクトルマシン(カーネル法)
サポートベクトルマシンの項目、境界線を視覚化したいなということで持ってる知識で無理くりやってみた。
まずは線形のサポートベクトルマシン(04)の学習データに境界線をひくのと、検証データのプロットをそれぞれ。
import matplotlib.pyplot as plt import numpy as np clr = ['red', 'blue'] plt.scatter(X_train.T[0], X_train.T[1], color=np.where(y_train==0, 'red', 'blue')) line =np.linspace(-1.5, 1.5) for coef, intercept, color in zip(fit.coef_, fit.intercept_, ['k','k']): plt.plot(line, -(line*coef[0] + intercept) / coef[1], c=color) break plt.show() plt.scatter(X_test.T[0], X_test.T[1], color=np.where(y_pred==0, 'red', 'blue')) plt.show()
続いてカーネル法。同じく学習データと検証データをプロット。
import numpy as np clr = ['red', 'blue'] plt.scatter(X_train.T[0], X_train.T[1], color=np.where(y_train==0, 'red', 'blue')) plt.show() plt.scatter(X_test.T[0], X_test.T[1], color=np.where(y_pred==0, 'red', 'blue')) plt.show()
このライブラリから境界線を引っ張る方法がわからなかったので、とりあえずしらみつぶしにポイントしたArrayを作成してそれらをPredictさせた結果をプロットしてみた。
line =np.linspace(-1.5, 1.5) arr = [] for x in line: for y in line: arr.append([x, y]) x_arr = np.array(arr) y_arr = model.predict(arr) clr = ['red', 'blue'] plt.scatter(x_arr.T[0], x_arr.T[1], color=np.where(y_arr==0, 'red', 'blue')) plt.show()
The Chikarazuku!
とりあえず力ずくで。スマートなやり方もゆくゆく学んでいきたい。
02 正則化項
02正則化項について、以下の2点について簡単なプログラムを書いて確認をしてみた。
- 罰則項ありの場合となしの場合での結果の比較
- 罰則項ありの場合となしの場合でのグラフのプロット
1. 罰則項ありの場合となしの場合での結果の比較
罰則項なしの場合のデータを個別に用意して比較できるようにアウトプットする
model = Ridge(alpha=1.0) model.fit(train_poly_X, train_y) train_pred_y = model.predict(train_poly_X) test_pred_y = model.predict(test_poly_X) print("Alpha=1.0") print("Error on Train X data: ", mean_squared_error(train_pred_y, train_y)) print("Error on Test X data: ", mean_squared_error(test_pred_y, test_y)) model1 = Ridge(alpha=0.0) model1.fit(train_poly_X, train_y) train_pred_y = model1.predict(train_poly_X) test_pred_y = model1.predict(test_poly_X) print("Alpha=0.0") print("Error on Train X data: ", mean_squared_error(train_pred_y, train_y)) print("Error on Test X data: ", mean_squared_error(test_pred_y, test_y))
結果
Alpha=1.0 Error on Train X data: 0.19642503883759263 Error on Test X data: 0.27179414009488306 Alpha=0.0 Error on Train X data: 0.018501373444128104 Error on Test X data: 0.43513975904165086
確かに罰則項ないなると、学習データに過学習していいるが、 罰則項がある場合、検証データにおいてより適用の具合が高くなっているようだ。
2. 罰則項ありの場合となしの場合でのグラフのプロット
import matplotlib.pyplot as plt x1 = np.linspace(0.0, 1.3, 101) w0 = model.intercept_ w = model.coef_ y1 = [w0 + w[1]*x + w[2]*x**2 + w[3]*x**3 + w[4]*x**4 + w[5]*x**5 + w[6]*x**6 for x in x1] w0_ = model1.intercept_ w_ = model1.coef_ y1_ = [w0_ + w_[1]*x + w_[2]*x**2 + w_[3]*x**3 + w_[4]*x**4 + w_[5]*x**5 + w_[6]*x**6 for x in x1] plt.scatter(train_X, train_y, color='blue') plt.scatter(test_X, test_y, color='red') plt.plot(x1, y1, color='black', label="alpha=1.0") plt.plot(x1_, y1_, color='brown', label="alpha=0.0") plt.legend()
結果
罰則化項なしの過学習にくらべ、罰則化項ありの学習の線が穏やかにフィットしているようにみえる。これだけだと、なしのほうが良いんでないかと考えてしまうが、先ほどみた検証データのように学習データにおける過学習はさけるべきであるようだ。