RAGを開発してみたい!ので簡単なものでもいいので作ってみよう!part3

このpartで目標としていた基本形は作れたことになります。簡単な質問で"タイトル"と"内容"が返ってくるものになります。 前回やったのは 特殊文字の削除 大文字小文字統一 ベクトル変換 今回行ったのは 検索クエリのベクトル化 コサイン類似度の計算 になります。ベクトル化に関しては前回も行ったので同じものになります。 # これが検索用の文字列 QUERY = '保険金が欲しい' # 検索用の文字列をベクトル化 query = openai.embeddings.create( model='text-embedding-3-large', input=QUERY ) # ベクトル取得 query = query.data[0].embedding ちなみにモデルの部分に関しては’text-embedding-3-large’の他に’text-embedding-3-small’もありますのでお好きな方を使ってください。精度はlargeのほうがいいですが料金は下がると思います。 次はコサイン類似度の計算になります。こちらは昔OpenAIでも提供されていたみたいですが、前のバージョンで提供されていたみたいなので他のもので代用します。簡単に自作できますがめんどくさい方はsklearnでも提供されているのでそちらを使ってください。 import numpy as np def cosine_similarity(v1, v2): # ベクトルのドット積 dot_product = np.dot(v1, v2) # ベクトルのノルム norm_v1 = np.linalg.norm(v1) norm_v2 = np.linalg.norm(v2) # コサイン類似度 similarity = dot_product / (norm_v1 * norm_v2) return similarity # 総当りで類似度を計算 results = map( lambda i: { 'title': i['title'], 'body': i['body'], # ここでクエリと各文章のコサイン類似度を計算 'similarity': cosine_similarity(i['embedding'], query) }, vector_database ) # コサイン類似度で降順(大きい順)にソート results = sorted(results, key=lambda i: i['similarity'], reverse=True) これで関連するファイルと内容が取得できます。‘result[0]‘であれば最も関連するもの、‘result[-1]‘であれば関連しないものあるいは反対のものになります。反対かどうかはコサイン類似度の値が負の値になってるかで確認できます。 ...

2024年4月14日

RAGを開発してみたい!ので簡単なものでもいいので作ってみよう!part2

このpartで基本が8割がた作れました。内容としては簡単な質問をすると"タイトル"と"内容"が返ってくる程度です。まだまだ理想には遠いですね。 前回やったのは PDFファイル読み込み ページ番号取得と削除 色んな空白を削除 今回行ったのは 特殊文字の削除 大文字小文字統一 ベクトル変換 この辺も全てChat-GPT任せでした。特殊文字に関してはURLとメールアドレス、特殊文字の削除になります。まあ私が扱ってるものの中にURLやメールアドレスはあまりなさそうですが、一般的には必要だと思います。 text = re.sub(r'http[s]?://\S+', '', text) text = re.sub(r'\S*@\S*\s?', '', text) text = re.sub(r'[!#\$%&\'()*+,\-./:;<=>?@\[\\\]^_`{|}~]', '', text) 次は大文字小文字の統一ですね。これが少し特殊ですが例えば “123abcアイウエオ①②③¹²³"という文字があった時に"123abcアイウエオ123123"となるように変換しています。これもあまり使われてないと思いますが、一応変換しています。 normalized_text = ''.join([unicodedata.normalize('NFKC', char) if not unicodedata.east_asian_width(char) in ('F', 'W', 'A') else char for char in text]) それからベクトル変換ですね。OpenAIの埋め込みベクトルに変換していきます。課金が必要なので他のやり方がないか考えたいところですが、簡単に実装するために使用します。いつかはTF-IDFかWord2Vecを使ってみたいです。 openai.api_key = os.environ['OPENAI_API_KEY'] vector_database.append({ 'title': filename, 'body': text, 'embedding': vector }) 課金といっても10000字くらい埋め込みベクトルに使っても0.01$もかかりませんので数円くらいならお試しで触ってみてください。 一つだけ注意点を話すと8192トークンまでしか入力として受け取れないので、もし文字数が多くなる場合は分割して、それぞれの平均を取るといいかと思います。私の場合はとりあえず7000文字くらいで分割しています。 for i in range(0, len(text), max_tokens): # max_tokens=7000 segment = text[i:i+max_tokens] res = openai.embeddings.create( model='text-embedding-3-large', input=segment ) vectors.append(res.data[0].embedding) average_vector = np.mean(vectors, axis=0).tolist() そういえばいつからかはわかりませんが埋め込みベクトルの数値を取り出す方法が変わってたみたいで、‘res[data][0][embedding]’ から ‘res.data[0].embedding’に変わっています。前の方法が良ければバージョンを下げていただければ大丈夫です。 ...

2024年4月12日

RAGを開発してみたい!ので簡単なものでもいいので作ってみよう!part1

大規模言語モデルが出てきてChat-GPTやGemini、Claudeが出てきましたが、“ハルシネーション"は中々解決できない問題ですね。人間でも勘違いや嘘を堂々と言うことはあるのでどっこいどっこいですが、なるべくなら減らしていきたいですね。 そこで出てくるのが"RAG"になります。RAG(Retrieval-Augmented Generation)は、情報検索を組み込んだ生成モデルで、特に自然言語処理タスクでの応用が注目されています。RAGは、大量のテキストデータから関連情報を検索し、その情報を基に関連するテキストを生成します。 というわけで開発手順をChat-GPTとClaudeに聞いてみました。 大体似たような回答になりました。 データセットの準備と前処理 検索エンジンの構築 学習済みモデルの構築 RAGモデルの構築(検索エンジンと学習済みモデルを統合) モデルのトレーニング モデルの評価と調整 という流れになりました。 データセットの準備のほうはできています。私は昔作ったこちらを再利用しようと思いますが、論文やら書籍をダウンロードしたほうが楽だと思います。 というわけでデータセットの準備が終わったので今度は前処理をしていこうと思います。私のデータはPDFになってるので文字を抽出して、不要な文字を削除するところまでやります。 ということでgithubには登録しましたが一部コードをピックアップして # PDFPage.create_pages()を使用してページのリストを取得し、その長さを数える page_count = len(list(PDFPage.create_pages(document))) # スペース、タブ、改行を削除 text = text.replace(' ', '').replace('\t', '').replace('\n', '') # 正規表現を使って他の空白文字を削除 text = re.sub(r'\s+', '', text) 簡単ではありますがページ番号の削除と空白削除を行いましたので、とりあえず次のステップに進もうと思います。何をしたらいいかChat-GPTとClaudeに聞いてみました。 Claude曰く形態素解析や正規化は行わなくてもいいみたいなので、一旦インデックスの作成をやっていこうと思います。ただ色々試行錯誤してやった方が精度が上がりそうであればやろうと思います。 ところでClaudeに聞いたときこのような解答が返ってきたことがありました。野球って何でしょうか?(笑) ということで引き続き開発を進めていこうと思います。この先llamaindeを使うのか他のAPIを使うのか、ベクトルデータベースはどうするのか調べながら考えてみようと思います。ではでは

2024年4月7日

いつの間にか配信されてたOmega Crafterをプレイしたら2日で前回のプレイ記録を超えていた!なんなら9割終わった

土日にKaggleをやらずゲームをやってたのですが早期アクセスが開始されたOmega Crafterで遊んでました。ストアページはこちら ちなみに前回は2面のボスを倒し切れず終わりました。武器の強化は十分だったのですがレベルアップが恐らく足らずクリアできませんでした。ただ世界の端までは見てきました。 今回アーリーアクセスで異なった点や遊んだ内容を少し話していこうかと思います。 そもそもOmega Crafterというゲームの流れとしては クラフトとレベルアップ ダンジョン?でボスを出現させるアイテムの入手 ボスを倒して世界レベルの上限を開放する 世界レベルを上げる ※世界レベルは"データアナライザー"というものに不要になったアイテム等を与えることでレベルを上げることができます。 という流れになります。ストーリーはほぼないのでひたすらクラフトとアイテムの収集を繰り返していきます。NPCも確認できる範囲ではいません。 そして他のクラフトゲームと異なる点は"グラミー"という存在です。グラミーは指示を出すことで自動で作業を行ってくれます。クラフトはもちろん、農業、鉱業、林業もこなせます。そしてグラミーへの指示がローコードで指示をするというのが特徴です。 このゲームはクラフトゲーム×プログラミング(ローコード)を組み合わせたところが特徴でゲームをやりつつプログラミングを知ることができます。勉強できるとまではいかないかもですが、こんな感じで作って動いてるんだなと知ることはできると思います。 長くなりましたがここまでがOmega Crafterの内容になります。 次に異なった点ですね。世界レベルの上限や敵の種類、クラフトの種類とかは増えていますね。この辺は想定通りかと思います。 これ以外だとスキルが増えていますね。主人公はジャンプ系と落下時ダメ軽減、視野拡大、グラミーは回復系が増えています。このジャンプ攻撃は強く普通の攻撃よりも大きなダメージを与えられます。炎上などの追加攻撃は入らないみたいですが。敵の攻撃を回避しつつ攻撃となることもあります あとは無限レベルアップが多分できなくなったと思います。1つ目のボスを出すための場所に敵をリポップさせるオブジェクトがあるのですが、以前はここでガードしつつグラミーが倒すことで永遠とレベルを上げることができました。今回は気づいたらなくなってたので、できなくなったんだと思います。 私が気づいたのはこのあたりですね。 次はざっくり攻略について書こうと思います。 攻略としては"探索"と"討伐"と"自動化"のパートに分かれると思います。 探索についてはとにかく敵を倒してレベルアップしつつクラフト用のアイテムを集めていく必要があると思います。それからダンジョン内の宝箱からアイテムを拾うことですね。スキルの割り振りはこんな感じ とにかくダッシュ時のスタミナ減少は必須ですね。後は2段ジャンプとインベントリ、視野拡大はどちらでも大丈夫です。それから攻撃よりは防御に振ったほうがいいですね。やられると経験値がなくなってアイテムもその場に落としちゃうので回収が面倒です。 食事は必須になります。体力とスタミナが増えます。場合によっては攻撃や防御にもバフがかかります。オレンジが体力で水色がスタミナです。 食事前 食事後 後は覚える必要はないですが崖を上るときにジャンプをすると早く登れます。スタミナには気を付けないと落ちてやられてしまいます。 次は討伐ですね。 レベルアップもある程度して装備が十分に整ったらボスに挑みましょう!必要なのはダンジョン内にある"封印"というアイテムです。1面は2つ、2面は3つ、3面は4つ必要になります。 それからボスは1度雑魚を召喚してきます。グラミーが生きていれば楽ですが、いない場合は苦戦を強いられます。弓矢を装備して避けつつ、各個撃破すると楽になるとは思います。3面では"爆発矢"があるので持っていくことをおススメします。 また大型ボスの特徴として顔面が弱点になります。その時におススメになるのがジャンプ攻撃になります。とは言えリスキーなので腕に自信がなければヒット&スウェイが基本戦法になります。 さらに腕に自信があれば2段ジャンプ攻撃で頭上に乗ることはできます。乗ってる間多少攻撃は来ないので矢で打ち放題になります。通常攻撃は当たらないこともありますし、ジャンプ攻撃だと落ちることもあります。 こちらも探索と同様食事は必須です。走って時間を稼ぎつつ回復したり、ローリングで攻撃を避けることもありますので体力とスタミナは欲しいですね。余裕があればバフがかかる食べ物もおすすめです。 ちなみに3面まで行けばエンチャント機能が解放されて装備に特殊効果を付与できます。体力や攻撃力、体力、スタミナなど効果は色々です。ぜひ試してみてください。 最後に自動化についてです。 このゲームの特徴でもあるローコードを使った作業の自動化ですが、基本的には標準搭載してあるものをえ十分対応できます。 クラフトはもちろん、農業、鉱業、林業等も基本搭載しています。では自分で作るのはどんな時か?自動化した時よくこんな場面に遭遇します。左は全く拾われないアイテム達、右は必要なところに別の素材が入ってるアイテム 全く拾われないアイテム 間違えて入れられた樹皮 こんな状況がたびたび発生します。左の方は気づいたらこうなっており、止めた後こっちで回収してきれいにして、クラフトしたらまた足りなくなって、再度作業を指示したら散らかるの無限ループに入ったりします。 右はクラフトで必要な素材が別のクラフトで作られるものだとして、その素材が足りなくなったりすると発生することがあります。何を言ってるかわからないかと思いますが、とりあえずクラフトで使用するコンテナを共通にしてればいずれ起きます。 このような状況を避けるためにはコンテナの中の数をカウントすると避けられます。マルチコンテナでなければコンテナの中のアイテムの種類は1つだけですので、“コンテナの中身が1以上であれば作業を行う"という判定を入れてあげるとよいです。 上図では長いですがやってることはコンテナの中がなくなったら別の加工台で作業をする、その加工台に必要な素材のコンテナの中がなくなったら別の加工台で作業をする、といった処理を流しています。 まあ作るのも大変だし、処理はシンプルであるほどいいものだと思ってるので色々やりすぎるのはおすすめできません。グラミーもたくさん召喚できますのでグラミーごとに必要なクラフトや作業を任せるのが一番だと思います。 それでも散らかったりするのが嫌であればコンテナの中の数で判定を行うとだいぶストレスは減るかと思います。他にも面白そうな処理はあるのでぜひいろいろ試してみるのもいいと思います。 最後に今の私の状況ですが表のボスは全て倒し切り世界レベルも全て解放し終わってます。そこでまだ9割という話に繋がるのですが、残ってる作業としてはマップ埋めとバトルシミュレーターになります。マップ埋めはまだまだですね。探索の仕方が良く性格に出ています(笑) 後はバトルシミュレーターですね。こちらは3面のボスと同等以上の強さを持ったボスと戦えます。敵はこれまでのボスの強さが強化されたもので戦闘パターンはほぼ同じです。アイテムに必要な素材は難しくないですが、段階的に倒す必要があります。 またもらえる素材や装備もあってこちらを強化していくことをできます。強化するにはボスを倒した時にもらえる素材が必要なので少し大変そうです… 以上で大体のことは説明できたと思います。作業の自動化を試行錯誤できますし、興味があればぜひやってみてください。ストーリーはないのでそこの面白さはないですが… それでは別のゲームで、ではでは。

2024年4月3日

やっていたKaggleのコンペが終わったので少し振り返る

私が参加していたコンペ(こちら)が終わったので少し振り返ってみようと思います。 一応私の経歴を軽く話すとデータサイエンティスト的な仕事をしつつも予測や分類自体はしたことなく、データセットの作り方や加工の作業がメインでpythonに関してはある程度分かっているという状況です。 そのうえでG検定やE資格を取得済みなので、機械学習や深層学習の知識はある程度ある形でKaggleを始めて挑んでみました。 定石としてタイタニックを触るべきですが、タイタニックのランキングを見てもつまらないので今開催されているSwagやKnowledgeと呼ばれるタイプのコンペに参加してみることをおススメします。 こちらの本でも言及されているのですがどうもタイタニックのデータは初心者向けではないみたいです。初心者を抜けた人向けなイメージです。 それはさておき今回のコンペでは一旦自身で加工してみてモデルを作って提出をするという流れをやってみました。 そこまでは前回のブログでも書いてました。その後ですが他の人のコードをを見て、Chat-GPTに解説してもらって分からない点を質問するということをひたすら繰り返してました。 いくつかピックアップすると ワンホットエンコーディングした時、出現回数が最も少ないカラムを削除していた。なぜ削除するのか? テストデータセットの全行数に対してユニークな値の割合が5%未満のカラムを取得するのはなぜですか?どのような意味がありますか? 特徴量間のピアソン相関を計算するのはなぜか? Optunaの研究(study)を最適化とはどういう意味か? という感じでたくさんの質問を投げてみました。その後帰ってきた返答に関してわからなかった部分もさらに深堀して聞くということを繰り返していました。 そこで理解した点としては ユニーク値が少ない値に関してはワンホットエンコーディングを行うのが有効←その前にやることがある 特徴量を減らすには全体行の5%未満の値でもいいが、クロスバリデーションで特徴量の有無を見てモデルの評価を行ったほうがよい ヒートマップは線形関係に関しては有効だが非線形関係には向いてない ワンホットエンコーディングした際、訓練データまたはテストデータ片方にしかないデータが存在することがあるので、1つにまとめるアプローチがある Optunaを使ってハイパーパラメータの最適化を行える 私の中ではヒートマップで各特徴量の相関を見たほうがいいと思っていたのですが、線形関係であれば見るべきであって、非線形関係であれば意味は少ないというのは新しい発見でした。よく考えればわかることではありますが(笑) それからクロスバリデーションで特徴量の有無によってモデルの評価と比較をすることができることは知りませんでした。クロスバリデーションはただデータセットを分割して検証をするだけで、特徴量の有無まで比較できるとは思ってませんでした。 ここで私のコンペは終了しました。上記の気づきをコードに落とし込むことができませんでした。上の解説や質問と返答の理解に時間を費やしてました。まあ土日はゲームをしてたので結局やらずに終わっただけですが… コンペが終わった後のスコアとディスカッションも見てたのですが、public1位の人がprivateでは200位台になってたりしてそんなこともあるのかと思いながら見てました。 ちなみに私は8個ほど順位を落としてました。そこまで熱心にデータの加工やパラメータの調整をしてないので気にしてないですが さてこのコンペが終わったのでまた次のコンペにも挑戦しようかと思います。まだSwagかKnowledgeに挑戦してみます。また現場で画像系のAIを作るみたいなので画像コンペにも参加してみようと思います。果たして役に立つのか不明ですが また今回の解説だったり質問の返答などは正しいとは限らないのでもう少し精査しようと思います。少しづつでも確実に自身の知恵としていきたいですね。ではでは

2024年4月1日

最近の生成AIを3つほど試してみたよ!

OpenAIから"Sora"のお披露目があり、夏に"GPT-5"がでるという発表がありましたね。 最近の生成AIはすごいなあと思いながら過ごしてますが、たまたま見つけた動画生成AI2つと音楽生成AIを見つけたので試してみました。全てGoogleのアカウントアあれば無料で試せますので興味があれば試してみてください! まずはPixVerseですね。テキストから動画を生成できます。時間は4秒だけですが一応できます。少し触ってみましたが思ったような動画を作るのは大変そうです。 このときは"Giant bee stings bear"というプロンプトを入れてみました。想定とは違いますが欲しい物体は出てきましたね。 次の動画生成AIはHaiperです。こちらでも同様のプロンプトをいれてみました。熊が出てこず蜂が前面に出てきて、人によっては嫌悪感を抱くかと思いますのでリンクだけ貼っておきます。興味があれば見てください。こちら 蜂が蜂を食べてるみたいな動画でそれも不気味なんですよね。こちらは2秒だけですがPixVerseよりも精度や解像度はよさそうです。いいプロンプトを見つけてみたいものです。 最後は音楽生成AIのSunoです。入れてみたプロンプトは"A giant bee stings a bear in anger and rejoices when it is repelled.“になります。感情を入れてみました。 できた音楽は2つになります。これとこれです。生成されたサムネはよくわかりませんが喜びを表した音楽ができました。また、歌詞も出ており英語で歌もついています。2つの歌詞は同じですが音楽が異なるのですごいなと感じましたね。ちなみに歌詞は下記 [Verse] In the forest, giant bee is on the prowl (oh yeah) Buzzin' 'round, lookin' for some mischief now (oh-oh) Spots a bear, thinks it's time to have some fun (oh yeah) Stings it hard, the battle has just begun (woo) [Verse 2] But the bear retaliates, swipes with all its might (oh no) Giant bee is repelled, takes flight into the night (oh-oh) Feelin' the sting, buzzing with adrenaline (oh yeah) But still it's jumpin' back, ready to sting again (woo) [Chorus] Buzzin' bee, buzzin' bee, flying wild and free (oh yeah) Stingin' bear, stingin' bear, a rivalry we see (oh-oh) Buzzin' bee, buzzin' bee, never gonna run (woo) Keep on buzzin', keep on stinging for fun (oh yeah) こんな感じで色んな生成AIを触ってみました。他にも日本から出た画像生成AIのAkumaでしたり、Sakana AIという低コストで精度が高いモデルが作られたりしています。 ...

2024年3月28日

生成AIのさらなる進化と今後の仕事について

最近Inputが出来てないな~と思ったので色々調べてみたところこの資料を見つけました。 ざっくり内容を話すと生成AIが労働へ及ぼす影響や知識の獲得、またその後の働き方について書かれています。せっかくなのでChat-GPTとClaudeにも要約してもらいました。 こちらではもう少し細かく要約されたものがありますので興味があれば見てください。 現在の生成AIでもいろんな職業に影響を与えていますが、この資料では将来的に膨大な知識が求められる職業にも影響があるという話です。AIを含むエンジニア系全般はもちろん科学者や技術者も対象です。 今のプログラマーだったりデータサイエンティストも頼ったほうがよいものができやすいと思います。私もちょくちょくコードの書き方を聞いたりしてます。 そんな生成AIが所謂 “業務知識” を持つようになったら労働を代替してくれるという話ですね。 とはいえ全てを任せるわけじゃなく最後の確認は必要だと思いますが。 ただ、最後の確認であればPLレベルの人がいれば十分で、ただのプログラマーやデータサイエンティストは不要になるのは間違いなさそうです。 他に必要になるのは人間同士の調整をする役目の人ですかね?営業とかでしょうか この話を聞くと今のままではいずれ職がなくなるんだなと考えられますね。数年位であれば大丈夫でしょうが、10年20年先もまだ働く気がするのでそうなると先を考えて行動しないといけないですね。 ブルーカラーの職業も最近はロボットが出てきているので代替されそうな気もしますが、人間の体のつくりは割と凄くて8時間動き続けても故障をしないものです。 ただ、ロボットなどの機械は部品が摩擦などで擦れてくるので長期的には向かないらしいです。そう考えたらまだ大丈夫な気はしますね。 一応金属も傷つけられたとしても時間をかけて回復するらしいのですが、動植物ほど早くなさそうです。そう考えるとブルーカラーがいいですかね?農業であれば食べ物も困らなさそうです。酪農もよさそうですがコストが高そうです。不動産とかもいいんですかね?気にはなってるんですが… そんな感じで将来のことを考えさせられる資料でした。私は将来的に人間は全員ニートになってほしいと思ってるんですが生きてるうちに来ないですかね?ではでは

2024年3月26日

たまにはゲームに夢中になってだらけてもいいんじゃない?

ここ最近はInputはそこまでやらず、Kaggleを触っていたのですがスコアが上がったことで少し満足してゲームのほうに夢中になってました。それもスマホゲー(笑) スマホゲーはメインのソシャゲーがあるのですが、それとは別のゲームやってました。広告に出るようなゲームですね 最近は飽きたのでまたKaggleに戻ろうと思ってブログを書き始めたのですが… ちなみにやってたのはほりドリ(iPhone版とAndroid版)とマージサバイバル(iPhone版とAndroid版)です。興味があればどうぞ ざっくりと2つのゲームを話すとほりドリは ドリルを使って地面を掘る 設計図と鉱石を入手する 新しいドリルを作る という流れで進めていきます。広告も少なくてスマホゲー特有の体力とかもないので、夢中になってやってました。特に爆発が楽しくて進むたびにどんどん爆発していって、資材は貯まり道も広がって楽しかったですね。1日ほどでしたが もう一つのマージサバイバルは エネルギーを使って資材を集める 必要があれば資材同士を結合して上位の資材にする 必要な資材が貯まったらストーリーが進む という流れです。こちらも広告をみるタイミングは少ないですが体力性なので使い切ったら待つ必要があります。大体2分で1回分のエネルギーが必要で100回分(200分)まで貯められます。 どちらも夢中になってやってしまってほぼ何も手がつきませんでした。しょうがないこんな日もありますし、1日で飽きたのでまあいいかという感じです。 私はSteamやVRもやってますが、最近は触ってないので何か機械があったタイミングで触りたいですね。転職や引っ越しとか 新卒の時はデータサイエンティストにつきたいと思ったのですが、今は他の職業に就きたいですね。AIに関するものもよさそうですが、ロボット系やエネルギー系も熱くなりそうですね。 No Game No Life! ではでは

2024年3月24日

Kaggleのスコアを少しずつ上げていってる話

前回から4日ほど空いてしまったのですが、Kaggleでどうやってスコアを上げるか四苦八苦してました。 そもそも前のスコアが低すぎたので少し改善するだけで上がるかなと思ってたのですが、なぜか上がらず少し結果を見てたら自分のコードミスだったというオチです(笑) 前回の予測コードがこちら で修正したコードがこちら for文を使って目的変数が変わるたびモデルの学習を行った後、予測を行っています。ちなみに私は訓練データを8:2に分割して実行しています。 前の時は全ての目的変数の学習が終わったとモデル予測を行っていました。本来であれば目的変数1つに対して学習して予測を行うのですが、全て学習した後予測してたので最後の目的変数の学習をしたモデルになってたので、想定していた結果にはならなかったみたいです。 というわけで修正した後のスコアがこちら すごい!だいぶ上がった!というかこれが普通のスコアっぽい(笑) よくなったので今度はもう少しデータと向き合いつつ、より良い加工方法とモデルの作り方を見てみようと思います。またDiscussionを見つつ、他の人のNotebookを見てみました。他人のコードをChat-GPTに解説してもらいつつ、不明な点を聞いてみようと思います。 余談ですが何もしないときとワンホットエンコーディングを行った時の結果を見てみます。AUCが上がったものもあれば下がったものもありますね。大幅に改善されたわけではないので、元のデータに対して加工したほうがよさそうです。外れ値とか入ってるかもしれないですね。 というわけでKaggleいろいろ試してるという話でした。ではでは

2024年3月22日

Kaggleをとりあえず触ってみて少しづつ予測や分類を理解していくぞ!

最初の段階でタイタニックを触ることが普通かもしれませんが、この書籍でも触れてますがタイタニックは軽く触るくらいでいいと思います。 順位もあまり動かないですし、モチベも続かないと思うので他のコンペに早く参加したほうが楽しい気がします。 私は今開催されているこちらのコンペに参加しています。こちらのコンペは基となったデータから似たような特徴量を作成したものになります。中身はテーブルデータなうえに “id” と数値データのみなのでとっつきやすいと思います。 とりあえず中を見てみます。 <class 'pandas.core.frame.DataFrame'> RangeIndex: 19219 entries, 0 to 19218 Data columns (total 35 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 id 19219 non-null int64 1 X_Minimum 19219 non-null int64 2 X_Maximum 19219 non-null int64 3 Y_Minimum 19219 non-null int64 4 Y_Maximum 19219 non-null int64 5 Pixels_Areas 19219 non-null int64 6 X_Perimeter 19219 non-null int64 7 Y_Perimeter 19219 non-null int64 8 Sum_of_Luminosity 19219 non-null int64 9 Minimum_of_Luminosity 19219 non-null int64 10 Maximum_of_Luminosity 19219 non-null int64 11 Length_of_Conveyer 19219 non-null int64 12 TypeOfSteel_A300 19219 non-null int64 13 TypeOfSteel_A400 19219 non-null int64 14 Steel_Plate_Thickness 19219 non-null int64 15 Edges_Index 19219 non-null float64 16 Empty_Index 19219 non-null float64 17 Square_Index 19219 non-null float64 18 Outside_X_Index 19219 non-null float64 19 Edges_X_Index 19219 non-null float64 20 Edges_Y_Index 19219 non-null float64 21 Outside_Global_Index 19219 non-null float64 22 LogOfAreas 19219 non-null float64 23 Log_X_Index 19219 non-null float64 24 Log_Y_Index 19219 non-null float64 25 Orientation_Index 19219 non-null float64 26 Luminosity_Index 19219 non-null float64 27 SigmoidOfAreas 19219 non-null float64 28 Pastry 19219 non-null int64 29 Z_Scratch 19219 non-null int64 30 K_Scatch 19219 non-null int64 31 Stains 19219 non-null int64 32 Dirtiness 19219 non-null int64 33 Bumps 19219 non-null int64 34 Other_Faults 19219 non-null int64 dtypes: float64(13), int64(22) memory usage: 5.1 MB 中身は数値データで最後の7カラムが予測対象の列になります。それから欠損値はないみたいなので、欠損値については考えなくてよさそうです。 ...

2024年3月18日