「Kaggleで勝つデータ分析の技術」が難しいと感じる人へ

はじめに

Kaggle書籍として2020年現在、鉄板というべき書籍があります。
(この記事を読みに来てくださった方はおそらく所有されていると思いますが)
Kaggleで勝つデータ分析の技術です。

この書籍は本当に良い書籍で日本人Kagglerであれば必携、むしろ持っていないと不利にすらなり得る書籍です。

しかし、中身を覗いてみると

  • 概念が難しすぎる
  • コードが読めない

と感じられる方も多いと思います。というのも、この書籍の内容がしっかりと理解できれば、知識的にはKaggle ExpertKaggle Master相当のものが得られるほど、ボリューム満点であるためです。筆者はKaggle Master手前くらいですが、まだ完璧に理解できていない部分もあります。なので、その点は安心して良いと思います。

逆に「これからKaggleを始めるぞ」という方が通読して全てを理解する必要はないと思っています。流し読みしておいて辞書的に使うのが良いと思います。

解決策

解決策1. もう少し簡単な書籍に挑戦してみる

こちらも有名な書籍なのですが、もう少し簡単な書籍です。

もし、Kaggleで勝つデータ分析の技術は難しすぎて全然わからないという方で、まだ持っていない方にはおすすめです。

解決策2. わかる人に相談する

エンジニアは親切な方、教えることが好きな方は多いです。特にKaggleの日本人コミュニティであるKaggler-jaはすばらしいです。
slackで誰でも質問できるので、ぜひ登録してみてください。
https://kaggler-ja-wiki.herokuapp.com/

Twitterでお気軽にに相談していただいても良いです。
本書の内容であれば大体答えることができると思いますのでそれで直接回答しても良いですし、Kaggler-jaの雰囲気についての質問などもウェルカムです。
Kaggleの相談なら大体乗れると思います。(チームでの参加のお誘いもウェルカムです)

解決策3. 書籍は一旦放置して、とにかくコンペに参加

この書籍の登場以前は、日本人Kagglerは日本語情報が少ない中、試行錯誤でコンペに取り組んでいました。後からこういった体系的にまとまった書籍が出てきたところで、知識を再確認しながら「良い書籍だね」と感想を述べています。

しかし、だからと言って「この書籍を教科書代わりに進めていくべきか?」という問いの答えがイエスかと言われると難しいです。
どちらかというと

  • ある程度コンペに参加してから振り返って知識を整理する
  • コンペに詰まったときに辞書として読む
    といった使い方が向いているのだと思います。

「Kaggleは、専門書を読んだ理して勉強するより実践的に勉強できる」という部分が良いところだと思うので、Kaggleの書籍を読んで頭を悩ませてばかりでは本末転倒というk何時もあります。

解決策4. あらためてKaggleを勉強する必要性を考え直す

とても辛辣な解決策で申し訳ないです。みなさんがKaggleに取り組もうとする動機は様々だと思いますが、どうしても勉強が進まないのであれば、そもそもあなたにとってKaggleの必要性が薄いのかもしれません。

そういった意味で、もしKaggleを始めたきっかけがキャリアに関する悩みであれば、もう一度機械学習やデータ分析のキャリアについて俯瞰しても良いかもしれません。以下の二冊がおすすめです。(二冊目は私が書いた書籍で、宣伝です笑)

記事情報

  • 投稿日:2020年10月11日
  • 最終更新日:2020年10月11日

Kaggle COVID Vaccineコンペをさくっと振り返る

はじめに

この記事では
OpenVaccine: COVID-19 mRNA Vaccine Degradation Predictionコンペについて振り返ります。

コンペの概要

COVIDのワクチン

COVIDー19のワクチンとして多様な種類のワクチンが検討されています。

コンペの背景

今回のコンペは、mRNAワクチンについて扱っています。RNAは自発的に分解される傾向にあることが知られており、mRNAワクチンは不安定であるという課題があります。
そこで、ホストはRNA分解のモデルと設計ルールを開発することを目指してコンペを開催しました。
このコンペでは与えられるRNAに対して、RNAを構成する各塩基がどれだけ不安定であるかを正確に予測するモデルを作成しました。
日本語でコンペの概要について説明したカーネルがあるので、こちらも読むと良いと思います。

データの概要

1つのサンプルが1つのRNAに対応します。

入力

抜粋ですが、下記のような情報が含まれていました。RNAは模擬的に一次元で表されていますが、実際にはRNAは三次元の構造を取っています。
詳しくはこちらのディスカッションを読むと良いでしょう。

1
2
3
"sequence":string"GGAAAAGCUCUAAUAACAGGAGACUAGGACUACGUAUUUCUAGGUAACUGGAAUAACCCAUACCAGCAGUUAGAGUUCGCUCUAACAAAAGAAACAACAACAACAAC"
"structure":string".....((((((.......)))).)).((.....((..((((((....))))))..)).....))....(((((((....)))))))....................."
"predicted_loop_type":string"EEEEESSSSSSHHHHHHHSSSSBSSXSSIIIIISSIISSSSSSHHHHSSSSSSIISSIIIIISSXXXXSSSSSSSHHHHSSSSSSSEEEEEEEEEEEEEEEEEEEEE"
  • sequence: 塩基を表します。
    • RNAなので、アデニン(A)、グアニン(G)、シトシン(C)、ウラシル(U)の4種類です。
  • structure: 括弧付きの塩基は、対応する括弧付きの塩基に対応することを示しています。
  • predicted_loop_type: どのようなループ構造を取っているかを示しています。
    • S: paired “Stem” M: Multiloop I: Internal loop B: Bulge H: Hairpin loop E: dangling End X: eXternal loop

出力

3変数を予測します。

  • reactivity: RNAサンプルの二次構造の可能性を判断するために使用
  • deg_Mg_pH10: 高pH(pH 10)でマグネシウムなしでインキュベートした後の塩基/結合での分解の可能性を判断するために使用
  • deg_ng_50C: マグネシウムなしで高温(50℃)でインキュベートした後の塩基/結合での分解の可能性を判断するために使用

個人的なこのコンペのカギ

データ長

seq_length(RNAの塩基の数)がTrainおよびPublic Testでは107、Private Testでは130でした。つまり、

  • seq_lenが可変なモデルを作る必要がある
  • TrainおよびPublic TestとPrivate Testのデータ分布が異なる
    ということです。

解法

カーネルなどをみると、GNN, Attention, CNN, LSTM, GRUのアンサンブルが用いられていました。上位陣の解法を含め突飛なモデリングはあまり無かったように思います。

上位のソリューション

小ネタ

コンペが延長

リスコアリングに時間がかかりコンペが一日延長されました。

SN_filter問題

実験の値には不確定さがあり、信頼できるサンプルであるかどうかを表すフラグのようなものとして、SN_filterという変数があった。

コンペ中

  1. ホスト「public testのみにfilterを適用する(SN_filter=1を使用する)」
  2. 参加者「private testにもfilterを適用するべき」
  3. ホスト「OK」

    コンペ終了後

  4. LB公表
  5. 参加者「全体的にスコアが悪いし、やっぱりfilterが適用されていないのでは?」
  6. ホスト「ごめんなさい。確かに適用されていなかったので再計算する」
  7. LB大変動

定数倍

https://www.kaggle.com/c/stanford-covid-vaccine/discussion/189182
良い子は真似してはいけない黒魔術的なやつです。Kaggleでは提出全体を単純に定数倍することで、スコアが良くな流ことがあります。

Kaggleおすすめ書籍

Kaggleで勝つデータ分析の技術に比べると、初学者向けの書籍といえます。

オンライン学習サービスUdemyでもKaggleについて学ぶことができます。

【Kaggleで学ぼう】Python と Keras で学ぶディープラーニング開発入門

宣伝

機械学習エンジニアを目指している方向けに、書籍を出しました。
サクッと読める内容ですので是非お手に取ってみてください。

記事情報

  • 投稿日:2020年10月8日
  • 最終更新日:2020年10月8日

コピペ用 便利なスニペット

はじめに

自分用のスニペットのメモです。よろしければお使いください。

Linuxコマンド

リストに記載されているファイルを操作したい。

catとダブルクォートを組み合わせる。
例:list.txtに記載されているファイルをout_dirにコピーする。

1
cp `cat list.txt` out_dir

記事情報

  • 投稿日:2020年10月7日
  • 最終更新日:2020年10月7日

インスタンス変数に動的にアクセスしたい

状況

Pythonでインスタンス変数に動的にアクセスしたい。
つまり、x.yのようにアクセスしたいけど、yに相当する文字列が動的に変化するので、変数v='y'としたい。
そして、x[v]とするとエラーになってしまう場合。

解決策

1
getattr(x,v)

記事情報

  • 投稿日:2020年10月1日
  • 最終更新日:2020年10月1日

Ubuntuサーバー徹底入門

はじめに

この記事では、Ubuntuサーバー徹底入門の気になった箇所や関連して調べたことをメモしています。

Linux(Ubuntu)初級者を脱したくらいのレベルのエンジニアが手元に置いておきたい良書です。

2. ユーザーの基本操作

シェル変数と環境変数

https://qiita.com/kure/items/f76d8242b97280a247a1

Vimのバージョン

vim –version | grep version

Smallの場合、backspaceが使えない

3. ファイル管理

ls -lで確認できる。

パーミッション

rwxの順

  • 所有者
  • 所有グループ
  • その他のユーザ

    ハードリンク数

ディレクトリのハードリンク
https://www.atmarkit.co.jp/ait/articles/1605/18/news015_3.html
ディレクトリの場合は「usr」や「home」といった名前の他に、自分自身を示す「.」というハードリンクが自動で作成されます。従って、ディレクトリにはハードリンクが「最低2つある」ことになります。サブディレクトリがある場合は、サブディレクトリから見た「..」(親ディレクトリ)があるため、ハードリンクの数は3つとなります。つまり、特別にハードリンクを増やしていない限り、ディレクトリのハードリンク数は「サブディレクトリの数+2」となります。

所有者とグループ

  • 所有者
  • 所有グループ

6. システムの設定と管理(1)

所属グループを確認

1
id

8. パッケージの管理

aptとは

Debian形式のパッケージ管理にはdpkgコマンドを使うが、パッケージの依存関係を手動で管理するのは大変。そこでAPTというパッケージ管理システムを利用する。コマンドには

実際

1
dpkg -h

してみると

1
Use 'apt' or 'aptitude' for user-friendly package management.

というメッセージが出てくる。

重要な構成ファイルを削除してしまった場合

--reinstallをつける

1
apt install --reinstall postfix

apt-file

特定のファイルを含むパッケージを検索できる

1
2
3
apt install apt-file
apt-file update
apt-file search [file_name]

ビルド

ダウンロード

configure

ビルドに必要なツールやライブラリが揃っているかどうかチェック
コンパイルに必要なMakefileが生成される

1
./configure

コンパイル

1
make

インストール

1
make install

9. ログの管理

systemdの生成するメッセージはjounralctlコマンドを使って閲覧できるため、基本的にはjounarlctlで十分

12. メールサーバー(Postfix)

ssの準備

apt install iproute2

システム起動時にPostfixも事項で起動

systemctl enable postfix

13. DNSサーバー

正引き

DNSフォーワーディング

ルータがDNSサーバとして動作しているように見える
https://www.aterm.jp/function/wg1800hp/guide/list/main/m01_m10.html
https://milestone-of-se.nesuke.com/l7protocol/dns/dns-proxy/

15. SSHサーバー

接続したサーバのSSHサーバ証明書は~/.ssh/known_hostsに格納される。

メモ

libxml2

libxml2とは、XMLを解析・操作するC言語のライブラリ

ASLinux

セキュリティ関連のLinuxカーネル制御機能

ss

socket statistics。旧netstat

コマンドが見つからない時

https://command-not-found.com/

記事情報

  • 投稿日:2020年9月19日
  • 最終更新日:2020年9月28日

書籍「機械学習を仕事にしたい君に」を執筆しました

はじめに

機械学習エンジニアを目指している方向けに、書籍を出しました。
もちろん、現役の方も「ああでもないこうでもない」とツッコミを入れながらお読みいただけると、多少はお役に立てるかと思います。
サクッと読める内容ですので是非お手に取ってみてください。

この記事では、書籍の内容について説明しようと思います。

書籍情報

  • タイトル: 機械学習を仕事にしたい君に
  • 文字数: 約15,000字(20分くらいで読めます!)

以下、Amazonの書籍概要より

1
2
3
4
5
6
7
8
9
10
11
12
本書では、主に機械学習を仕事にしたいと考えている方に向けて以下のような情報を提供します。
・機械学習を使うことができる仕事
・機械学習エンジニアの業務時間外の勉強の一例
・大手での機械学習エンジニアの業務内容の一例
・副業や転職事情
・Kaggleについて
それらの情報は次のような方々にとってお役に立てるようにまとめています。
・機械学習を仕事にしたいと考えている学生
・転職して機械学習スキルを得たいと思っている現役エンジニア
・IT業界への転職を考えており、機械学習から入ろうと思っている社会人
・他のエンジニアの情報取集をしたい機械学習エンジニア
これらの情報は「機械学習を仕事にすること」に興味を持ち、本書を手に取ってくださっている皆様のお役に立てるはずです。

目次

  • はじめに
  • 機械学習を仕事にできる業種・職種
  • 業務内容の一例
  • 業務時間外の勉強
  • 副業・さらなる転職へ
  • Kaggle
  • あとがき

みどころ

  • 機械学習を仕事にできる職種を紹介し、その平均年収について調査しました。
  • 機械学習に必要なスキルを独自に「知識」「実装」「数学」に分類し、それぞれの勉強方法についてまとめています。
  • クラウド、フロントエンドなど機械学習エンジニアがプラスアルファで身につけておきたい技術について紹介しています。
  • Kaggleをオススメする理由について紹介しています。

まとめ

少しでも誰かの役に立てればと思い、お値打ち価格で販売しているのでぜひお手に取ってみてください!

記事情報

  • 投稿日:2020年8月28日
  • 最終更新日:2021年5月28日

Network Namespace

はじめに

この記事では書籍「Linuxで動かしながら学ぶTCP/IPネットワーク入門」の第3章Network Namespaceに関連するメモを残しておきます。Network NamespaceはLinuxカーネルの機能で、ネットワーク設定を分離して管理することができます。この機能を使って、ネットワークの勉強をしていきます。書籍全体のレビューはこちらに書いています。

環境構築

書籍では第2章で環境構築をしますが、第3章の内容のみであれば以下のように構築できます。Dockerを利用しました。

1
2
3
4
docker run --privileged -it --name tcpip ubuntu
apt-get update
apt-get -y install iproute2
apt-get -y install iputils-ping

セグメント内での通信

新しくNetwork Namespaceを作成

まずはNetwork Namespaceの一覧を確認します。結果は空です。

1
ip netns list

新しくNetwork Namespaceを作成します。

1
ip netns add helloworld

再度、一覧を確認すると、Network Namespaceが作成されたことが確認できます。

1
ip netns list

ネットワークデバイスのIPアドレスを確認

1
ip address show
1
ip netns exec helloworld ip address show

後者のコマンドの方が結果が少なく、eth0などの見慣れたインターフェイスもありません。Network Namespaceではシステムとは独立したネットワークを作ることができるのです。

ルーティングテーブルについても確認してみます。

1
ip netns exec helloworld ip route show

こちらも結果は空となります。

Network Namespaceの削除

以後はこのNetwork Namespaceは使いませんので、削除します。

1
ip netns delete helloworld

通信する

新しくNetwork Namespaceを2つ作成します。

1
2
ip netns add ns1
ip netns add ns2

通信のために、veth (仮想的なネットワークインターフェイス)を使います。まずは一覧を確認します。

1
ip link show | grep veth

vethを下記のコマンドで作成します。

1
ip link add ns1-veth0 type veth peer name ns2-veth0

確認します。

1
ip link show | grep veth

作成したvethインターフェイスのペアを、Network Namespaceで使えるようにします。まずはまだ使えないことを確認します。

1
ip netns exec ns1 ip link show | grep veth

設定します。

1
2
ip link set ns1-veth0 netns ns1
ip link set ns2-veth0 netns ns2

再度確認します。

1
ip netns exec ns1 ip link show | grep veth

vethインターフェイスにIPアドレスを割り当てる

IPを使って通信をしたいため、IPアドレスの割り当てが必要です。

1
2
ip netns exec ns1 ip address add 192.0.2.1/24 dev ns1-veth0
ip netns exec ns2 ip address add 192.0.2.2/24 dev ns2-veth0

pingを送ります。

1
ip netns exec ns1 ping -c 3 192.0.2.2 -I 192.0.2.1

どうやら設定が不十分です。ネットワークインターフェイスの状態がUPになっていないためです。

1
2
ip netns exec ns1 ip link set ns1-veth0 up
ip netns exec ns2 ip link set ns2-veth0 up

再度実行します。

1
ip netns exec ns1 ping -c 3 192.0.2.2 -I 192.0.2.1

繋がりました!

ルータの利用

Network Namespaceの再作成

新しくNetwork Namespaceを作成し直したいため、古いものを削除します。

1
2
3
4
5
ip netns delete ns1
ip netns delete ns2
ip netns add ns1
ip netns add router
ip netns add ns2

vethインターフェイスの作成

1
2
ip link add ns1-veth0 type veth peer name gw-veth0
ip link add ns2-veth0 type veth peer name gw-veth1

Network Namespaceにvethインターフェイスを割り当て

1
2
3
4
ip link set ns1-veth0 netns ns1
ip link set gw-veth0 netns router
ip link set gw-veth1 netns router
ip link set ns2-veth0 netns ns2

ネットワークインターフェイスの状態をUPに変更

1
2
3
4
ip netns exec ns1 ip link set ns1-veth0 up
ip netns exec router ip link set gw-veth0 up
ip netns exec router ip link set gw-veth1 up
ip netns exec ns2 ip link set ns2-veth0 up

IPアドレスの付与

1
2
3
4
ip netns exec ns1 ip address add 192.0.2.1/24 dev ns1-veth0
ip netns exec router ip address add 192.0.2.254/24 dev gw-veth0
ip netns exec router ip address add 198.51.100.254/24 dev gw-veth1
ip netns exec ns2 ip address add 198.51.100.1/24 dev ns2-veth0

セグメント内疎通確認

1
2
ip netns exec ns1 ping -c 3 192.0.2.254 -I 192.0.2.1
ip netns exec ns2 ping -c 3 198.51.100.254 -I 198.51.100.1

ルータ越し疎通確認

1
ip netns exec ns1 ping -c 3 198.51.100.1 -I 192.0.2.1

この時点では失敗します。

ルーティングエントリを追加

デフォルトルートをrouterに向けます。

1
2
ip netns exec ns1 ip route add default via 192.0.2.254
ip netns exec ns2 ip route add default via 198.51.100.254

ルータ越し疎通確認

1
ip netns exec ns1 ping -c 3 198.51.100.1 -I 192.0.2.1

成功です!

繋がらない場合は下記のコマンドを実行してみてください。

1
ip netns exec router sysctl net.ipv4.ip_forward=1

最後に

書籍Linuxで動かしながら学ぶTCP/IPネットワーク入門は実際にコマンドを動かしながらネットワークの仕組みを学べる優良な書籍だと思います。ぜひご覧になってみてください!

記事情報

  • 投稿日:2020年7月19日
  • 最終更新日:2020年7月21日

Google Maps Platform Directions API

はじめに

2地点間の距離や所要時間を取得したい場合、Googleの提供するルートAPI(Dirctions API)を利用できます。

ルートAPIはGoogle Cloud PlatformのAPIサービスとして提供されています。そのためGCPのアカウントが必要となります。料金は個人利用の範囲であれば、基本的には無料枠に収まるでしょう。

公式ドキュメント

APIキーの払い出しはこちらの記事が参考になります。

コード

Pythonでのサンプルです。

1
2
3
4
5
import requests
payload = {'origin': '東京駅', 'destination': 'スカイツリー','key':'YOUR_API_KEY'}
url = 'https://maps.googleapis.com/maps/api/directions/json'
r = requests.get(url, params=payload)
print(r.text)

出発地や目的地は緯度経度で指定することもできます。

1
2
3
4
5
import requests
payload = {'origin': '35.6829696,139.7666604', 'destination': '35.7108481,139.8129626','key':'YOUR_API_KEY'}
url = 'https://maps.googleapis.com/maps/api/directions/json'
r = requests.get(url, params=payload)
print(r.text)

記事情報

  • 投稿日:2020年7月15日
  • 最終更新日:2020年7月15日

Linuxで動かしながら学ぶTCP/IPネットワーク入門 感想

はじめに

この記事では書籍「Linuxで動かしながら学ぶTCP/IPネットワーク入門」の概要と関連するメモを載せておきます。

書籍の概要

TCP/IPについての解説書です。
タイトルの通り内容は非常に平易でありながら、手を動かしながら学べるのでとても理解しやすいです。

想定する読者のレベル

著者は次のように想定していらっしゃいます。

1
2
3
4
- ネットワークが専門ではない IT エンジニア、またはそれを志す学生さん
- 他の TCP/IP に関する本を読んだことはあるけど、身についている実感が少ないという方
- ネットワークやインフラの技術について、よく知らないけど興味はあるという方
- 気軽にネットワークを組んで実験できる環境の作り方が知りたいという方

簡単なLinuxコマンド操作ができたり、何らかのプログラミング経験はあった方が良いと思います。

また必須ではないですが、Ubuntu上でコマンド操作を行いながら読み進めます。環境がない場合は、VMDockerで環境を構築できると良いと思います。

目次

  1. はじめに
  2. TCP/IPとは
  3. Network Namespace
  4. イーサネット
  5. トランスポート層のプロトコル
  6. アプリケーション層のプロトコル
  7. NAT
  8. ソケットプログラミング
  9. おわりに
  10. 付録

メモ

ネタバレにならない範囲で、個人的なメモを残しておきます。書籍の雰囲気の参考になれば幸いです。

2. TCP/IPとは

127.0.0.1localhost

下記のファイルで確認することができます。

1
more /etc/hosts
1
127.0.0.1	localhost

ICMP

pingは、ICMPプロトコルを使用したプログラムです。
ICMPはネットワーク層のプロトコルですが、同じくネットワーク層のプロトコルであるIPの上に成り立っています。

https://www.khstasaba.com/?p=645
https://www.infraexpert.com/study/tcpip4.html

IPヘッダ プロトコル番号

  • 1 ICMP
  • 6 TCP
  • 17 UDP

3. Network Namespace

こちらに別途、記事を書きました。

おわりに

実践的で身になる内容で、大変良い書籍だと思います。
ちなみにKindle Unlimitedの対象ですので、すでに登録済みの方には特におすすめです。

記事情報

  • 投稿日:2020年7月5日
  • 最終更新日:2020年7月19日

短時間フーリエ変換(librosa.core.stft)

はじめに

Kaggle Free Sound Audio Tagging 2019で学ぶ音声処理ではKaggleコンペとその解法を題材に音声処理について解説しています。この記事は、スペクトログラムの計算に出てくるlibrosa.core.stftについて掘り下げます

librosa.core.stft

公式マニュアル

https://librosa.org/librosa/master/generated/librosa.core.stft.html

解説

通常、フーリエ変換は信号の全時間にわたって計算を行いますが、時間ごとに周波数に関する情報が欲しい場合は適しません。そういった場合に、短い区間に対するフーリエ変換を繰り返します。これが短時間フーリエ変換です。

パラメータ

  • y : np.ndarray [shape=(n,)], real-valued
  • n_fft : int > 0 [scalar]
  • hop_length : int > 0 [scalar]
  • win_length : int <= n_fft [scalar]
  • window : string, tuple, number, function, or np.ndarray [shape=(n_fft,)]
  • center : boolean
  • dtype : numeric type
  • pad_mode : string or function

win_lengthを変化させることにどのような意味があるのかを考察します。

準備

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import IPython.display as ipd
fname = 'input/0006ae4e.wav'
ipd.Audio(fname)
import librosa
y, sr = librosa.load('input/0006ae4e.wav')
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
def show_stft(n_fft,hop_length,win_length):
S = np.abs(librosa.stft(y,n_fft,hop_length,win_length))**2
melspec = librosa.feature.melspectrogram(S=S)
log_melspec = librosa.power_to_db(melspec)
librosa.display.specshow(librosa.power_to_db(S))
plt.show()
librosa.display.specshow(log_melspec)
plt.show()

デフォルト値

まずはデフォルト値から見てみます。デフォルトではwin_length=n_fftとなります。n_fftのデフォルト値は2048ですので、win_length=2048となります。

1
show_stft(2048,512,2048)

win_lenghtを小さくした場合

波形を小さく区切って周波数分析を行うと、時間分解能は細かくなるが、周波数分解能は粗くなる。

1
show_stft(2048,512,32)

win_lenghtを大きくした場合

波形を大きく区切って周波数分析を行うと、周波数分解能は細かくなるが、時間分解能は粗くなる。

1
show_stft(16384,512,16384)

記事情報

  • 投稿日:2020年7月4日
  • 最終更新日:2020年7月4日