uv

uv https://docs.astral.sh/uv/ nix: https://github.com/pyproject-nix/uv2nix インストール 1 % curl -LsSf https://astral.sh/uv/install.sh | sh 1 2 3 4 5 6 7 8 9 10 11 downloading uv 0.5.14 aarch64-apple-darwin no checksums to verify installing to /Users/hdknr/.local/bin uv uvx everything's installed! To add $HOME/.local/bin to your PATH, either restart your shell or run: source $HOME/.local/bin/env (sh, bash, zsh) source $HOME/.local/bin/env.fish (fish) 1 2 3 % source .local/bin/env % which uv /Users/hdknr/.local/bin/uv 1 2 % uv --version uv 0.5.14 (9f1ba2b96 2025-01-02) uvx (uv tool run) uvではdevelop環境で利用するtoolをuv tool(uvx)というコマンド別管理することが可能 ...

2025年1月5日 · 1 分

Gradio

Gradio https://www.gradio.app/ 機械学習向けWeb UIライブラリ Gradio Gradio: Pythonで簡単にAIをWebアプリ化 gradio 入門 (1) - 事始め gradio 入門 (2) - Interface gradio 入門 (3) - Blocks gradio 入門 (4) - 主な機能

2024年12月30日 · 1 分

Python: HTTP

Python: HTTP 簡単なHTMLサーバー(http.server + SimpleHTTPRequestHandler) ディレクトリ一覧を返す 1 2 3 4 5 6 7 8 9 10 import http.server import socketserver PORT = 8000 Handler = http.server.SimpleHTTPRequestHandler with socketserver.TCPServer(("", PORT), Handler) as httpd: print("serving at port", PORT) httpd.serve_forever()

2024年12月15日 · 1 分

scikit-learn: 異常検知

異常検知 sklearnを用いた異常検知のサンプルコード sklearn(サイキットラーン)は、Pythonで機械学習を行うための強力なライブラリです。異常検知も、sklearnの様々なアルゴリズムを用いて行うことができます。 異常検知の手法選択 異常検知の手法は、データの種類や異常パターンによって異なります。代表的な手法としては、以下のものが挙げられます。 One-Class SVM: データの境界線を学習し、その境界から離れた点を異常と判定します。 Isolation Forest: データ点を孤立させるような決定木を複数作成し、異常度をスコア化します。 Local Outlier Factor (LOF): データ点の近傍の密度に基づいて異常度を計算します。 サンプルコード(Isolation Forest) ここでは、Isolation Forestを用いた異常検知のサンプルコードをPythonで記述します。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from sklearn.ensemble import IsolationForest import numpy as np # サンプルデータ生成 np.random.seed(42) X = np.random.randn(100, 2) # 正常データ X = np.r_[X, np.random.randn(20, 2) + [3, 3]] # 異常データ # Isolation Forestモデルの作成 clf = IsolationForest(contamination=0.2) # 異常データの割合を指定 clf.fit(X) # 異常度の予測 y_pred = clf.predict(X) # 異常データの抽出 anomalies = X[y_pred == -1] # 結果の表示 print("異常データ:") print(anomalies) コード解説 データの生成: 正常なデータと異常なデータを生成します。 モデルの作成: IsolationForestのインスタンスを作成し、contaminationパラメータで異常データの割合を指定します。 モデルの学習: fitメソッドでモデルを学習させます。 異常度の予測: predictメソッドで各データの異常度を予測します。 異常データの抽出: 予測結果が-1のデータを異常データとして抽出します。 その他の注意点 contaminationパラメータ: 異常データの割合を事前にある程度把握している場合に、このパラメータを指定することで、より正確な異常検知が可能になります。 特徴量のスケーリング: 特徴量のスケールが異なる場合、標準化や正規化を行うことで、モデルの性能が向上する場合があります。 ハイパーパラメータのチューニング: Isolation Forestには、他にも様々なハイパーパラメータが存在します。GridSearchCVなどを用いて、最適なパラメータを探索することができます。 より詳細な情報 sklearnの公式ドキュメント: IsolationForestの詳しい説明や他の異常検知アルゴリズムについては、sklearnの公式ドキュメントを参照してください。 Qiitaなどの技術ブログ: 多くの技術ブログで、sklearnを用いた異常検知の具体的な事例や解説が紹介されています。 応用 異常検知は、不正検出、故障検知、品質管理など、様々な分野で活用されています。 ...

2024年12月12日 · 1 分

Django Email

メール送信 Djangoでメールを送信する際に、都度サーバーを切り替える方法はいくつかあります。以下の手順で実装できます。 メールサーバーの設定を動的に変更する: DjangoのEmailMessageクラスを使用して、メール送信時にサーバー設定を動的に変更できます。例えば、以下のようにconnectionパラメータを使用して異なるサーバーを指定します。 1 2 3 4 5 6 7 8 9 10 11 12 13 from django.core.mail import EmailMessage, get_connection def send_email(subject, message, from_email, recipient_list, server_settings): connection = get_connection( host=server_settings['EMAIL_HOST'], port=server_settings['EMAIL_PORT'], username=server_settings['EMAIL_HOST_USER'], password=server_settings['EMAIL_HOST_PASSWORD'], use_tls=server_settings['EMAIL_USE_TLS'], use_ssl=server_settings['EMAIL_USE_SSL'], ) email = EmailMessage(subject, message, from_email, recipient_list, connection=connection) email.send() サーバー設定のリストを用意する: 複数のサーバー設定をリストで管理し、メール送信時にランダムまたは順番に選択する方法です。 ...

2024年11月28日 · 1 分

クラスタリング

クラスタリング 手法 ユーザーを属性に基づいてクラスタリングするためには、いくつかの手法があります。以下に代表的なものを紹介します: K-meansクラスタリング: ユーザーを事前に決めた数のクラスタに分ける手法です。各クラスタの中心(セントロイド)を計算し、ユーザーを最も近いクラスタに割り当てます。 階層的クラスタリング: ユーザーを階層的にクラスタリングする手法です。デンドログラムと呼ばれる木構造を作成し、ユーザーを段階的にクラスタに分けます。 DBSCAN(Density-Based Spatial Clustering of Applications with Noise): 密度に基づくクラスタリング手法で、データの密度が高い部分をクラスタとして識別します。ノイズや外れ値を扱うのに適しています。 Gaussian Mixture Models(GMM): データが複数のガウス分布から生成されていると仮定し、各クラスタをガウス分布としてモデル化します。クラスタの形状が楕円形の場合に有効です。 主成分分析(PCA): 次元削減の手法ですが、クラスタリングの前処理として使用されることが多いです。データの重要な特徴を抽出し、クラスタリングの精度を向上させます。 これらの手法を使うことで、ユーザーを効果的にクラスタリングし、属性に基づいた分析やマーケティング戦略の立案が可能になります。どの手法が最適かは、データの特性や目的によって異なるため、いくつかの手法を試してみると良いでしょう。 どの手法について詳しく知りたいですか?または、具体的なデータの例があれば教えてください。 DBSCAN 以下に、Pythonを使ってDBSCANでデータをクラスタリングするサンプルコードを示します。この例では、scikit-learnライブラリを使用しています。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import numpy as np from sklearn.cluster import DBSCAN from sklearn.datasets import make_blobs import matplotlib.pyplot as plt # サンプルデータの生成 X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0) # DBSCANの実行 dbscan = DBSCAN(eps=0.3, min_samples=5) clusters = dbscan.fit_predict(X) # クラスタリング結果のプロット plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('DBSCAN Clustering') plt.show() このコードでは、以下の手順を踏んでいます: ...

2024年11月17日 · 1 分

SQLModel

SQLModel テーブル定義 SQLModel で簡単なテーブルを作成する Alembic マイグレーション SQLModel で設計したモデルを Alembic でマイグレーション Alembic で複数モデルを扱う alembic + SQLModelでデータベースをマイグレーションする

2024年10月17日 · 1 分

gunicorn

Gunicorn max_requests / max_requests_jitter Gunicornでメモリリークを避けるために子プロセスを定期的に再起動するには、max_requestsとmax_requests_jitterの設定を利用するのが効果的です。これにより、一定のリクエスト数を処理した後にワーカープロセスが自動的に再起動されます。 以下はその設定方法です: max_requests: 各ワーカープロセスが再起動される前に処理するリクエストの最大数を指定します。 max_requests_jitter: 再起動のタイミングをランダム化するためのオプションです。これにより、全てのワーカープロセスが同時に再起動されるのを防ぎます。 Gunicornの設定ファイル(例:gunicorn.conf.py)に以下のように追加します: 1 2 3 4 # gunicorn.conf.py max_requests = 1000 # 1000リクエストごとに再起動 max_requests_jitter = 50 # 再起動タイミングをランダム化 または、コマンドラインで起動する際にオプションとして指定することもできます: 1 gunicorn --max-requests 1000 --max-requests-jitter 50 myapp:app これにより、各ワーカープロセスは1000回のリクエストを処理した後、ランダムに最大50回のリクエストを追加で処理してから再起動されます¹(https://qiita.com/ryu22e/items/2668a2243a5191bcdc78)²(https://zenn.dev/xknzw/articles/d2d337ae2f8966)³(https://qiita.com/_konishi_/items/1dc2bbfc386f57d06934)。 この設定により、メモリリークの影響を最小限に抑えつつ、サービスの安定性を保つことができます。 ¹(https://qiita.com/ryu22e/items/2668a2243a5191bcdc78): gunicorn(>=19.2)ではmax_requestsと一緒にmax_requests_jitterも使おう - Qiita ²(https://zenn.dev/xknzw/articles/d2d337ae2f8966): gunicorn syncワーカーの全体像メモ - Zenn ³(https://qiita.com/_konishi_/items/1dc2bbfc386f57d06934): gunicornでディスク使用量が増え続ける現象への対処 - Qiita (1) gunicorn(>=19.2)ではmax_requestsと一緒にmax_requests_jitterも使おう. https://qiita.com/ryu22e/items/2668a2243a5191bcdc78. (2) gunicorn syncワーカーの全体像メモ - Zenn. https://zenn.dev/xknzw/articles/d2d337ae2f8966. (3) gunicornでディスク使用量が増え続ける現象への対処 - Qiita. https://qiita.com/_konishi_/items/1dc2bbfc386f57d06934.

2024年10月11日 · 1 分

ltsv

ltsv ltsv から csvに変換 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #!/usr/bin/env python import click import pandas as pd import csv import re @click.group() @click.option("--tf_output", "-to", default=None) @click.pass_context def group(ctx, tf_output): pass @group.command() @click.argument("src") @click.pass_context def ltsv2csv(ctx, src): """LTSV to CSV""" output = f"{src}.csv" def get_line_dict(line): return dict(re.search(r"^([^\:]+)\:(.*)$", i).groups() for i in line) with open(src) as f: data = pd.DataFrame(map(get_line_dict, csv.reader(f, delimiter="\t"))) data.to_csv(output, index=False) if __name__ == "__main__": group()

2024年10月11日 · 1 分

DSpy

DSPy (Declarative Sequencing for Python) https://dspy-docs.vercel.app/ (Programming—not prompting—Language Models) DSPyについて DSPyは、LMプロンプトとウェイトをアルゴリズム的に最適化するためのフレームワークです、 特にLMがパイプライン内で1回以上使用される場合。 LMを使用して複雑なシステムを構築する なし DSPy、あなたは一般的に次のことを行う必要があります: (1)問題をステップに分解する、 (2)各ステップが個別にうまく機能するまでLMをうまく促す、 (3)ステップを微調整してうまく連携する、 (4)合成例を生成する各ステップを調整し、 (5)これらの例を使用して、より小さなLMを調整してコストを削減します。 現在、これは困難で厄介です。パイプライン、LM、またはデータを変更するたびに、すべてのプロンプト(または微調整手順)を変更する必要がある場合があります。 これをより体系的ではるかに強力にするために、 DSPy 2つのことを行います。 まず、プログラムの流れを分離します(modules)各ステップのパラメーター(LMプロンプトとウェイト)から。 第二に、 DSPy 新しい optimizers、これは、LMコールのプロンプトやウェイトを調整できるLM駆動アルゴリズムです。metric 最大化したい。 DSPy のような強力なモデルを日常的に教えることができます GPT-3.5 または GPT-4 と地元のモデル T5-base または Llama2-13b タスクではるかに信頼性が高くなること、つまり、より高い品質を持つこと、および/または特定の障害パターンを回避すること。 DSPy オプティマイザーは 同じ プログラム 異なる 各LMの指示、ショットの少ないプロンプト、および/またはウェイトの更新(finetunes)。 これは、LMとそのプロンプトが、データから学習できるより大きなシステムの最適化可能な部分としてバックグラウンドにフェードインする新しいパラダイムです。 tldr; LMでハードタスクを解決するためのプロンプトが少なく、スコアが高く、より体系的なアプローチ。 ニューラルネットワークへのアナロジー ニューラルネットワークを構築するときは、マニュアルを書きません for-loops 以上のリスト 手調整 フロート。代わりに、次のようなフレームワークを使用できます PyTorch レイヤーを作成する(例: Convolution または Dropout)0次に、オプティマイザー(SGDやAdamなど)を使用して、ネットワークのパラメーターを学習します。 同上!DSPy 適切な汎用モジュールを提供します (例: ChainOfThought、 ReAct等)、文字列ベースのプロンプトトリックを置き換えます。 迅速なハッキングと1回限りの合成データジェネレーターを置き換えるには、 DSPy 一般的なオプティマイザーも提供します(BootstrapFewShotWithRandomSearch または MIPRO)、 これはプログラムのパラメーターを更新するアルゴリズムです。 コード、データ、アサーション、またはメトリックを変更するときはいつでも、 コンパイル あなたのプログラムをもう一度 DSPy 変更に適合する新しい効果的なプロンプトを作成します。 ...

2024年10月4日 · 1 分