尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

机器学习原理练习题解析:正则化、朴素贝叶斯与线性回归

机器学习原理练习题解析:正则化、朴素贝叶斯与线性回归 简介这是一份机器学习原理及应用练习题答案文档面向机器学习学习者与备考学生内容聚焦算法原理与实践应用。文档按章节整理了机器学习概述、逻辑回归与最大熵模型、k-近邻算法、决策树、朴素贝叶斯分类器、支持向量机、随机森林以及深度学习等核心主题每章均设有选择题和参考答案并配有简答题要点能帮助读者快速检验概念理解其中对过拟合、正则化、SVM核函数、随机森林集成策略等易混淆知识点也有针对性解析。资源共 1 个 docx 文件大小约 31KB轻巧便携适合随时翻阅复习。目前已有 2226 人学习下载。无论是期末复习、考研准备还是入门自测都能借助这份答案查漏补缺尤其适合需要系统梳理机器学习基础概念、常见算法及模型选择方法的初学者。1. 「机器学习原理及应用练习题答案.docx」が問いかけているものこのファイル名のdocxには、コースの中で問われやすい「原理」と「応用」の演習問題と、それに対する解答がまとめられている。具体的には、正則化や損失関数の意味を説明する概念問題、小さなデータセットでエントロピーや事後確率を計算する問題、線形回帰のパラメータを求める計算問題という構成が典型的だ。期末試験前に一気に復習したい学生はもちろん、実務で「予測はできるが理論の説明が苦手」という壁に当たったエンジニアにとっても、ちょうどよい問題集になる。ただし、答えを丸暗記しても数字や設定が変われば手が止まる。この記事では、練習問題を自分の力で解いて解答資料を作る流れに沿って、理論の要点、具体的な計算手順、docxへの整理方法、答案の検証テクニックを順に書いていく。2. 机器学习原理的概念问题正則化・損失関数・評価指標の答え方2.1 「説明せよ」問題の答案は4要素で組み立てる概念問題の採点者は、結論だけを見ているわけではない。ある概念を定義し、その理由を一言添え、数字や具体例で補強し、最後に適用上の注意を書く。この4点セットを答案の型にしておくと、どのような問いにも応用が効く。たとえば「L2正則化とは何か」という問題に対しては、「重みの二乗和を損失関数に加え、モデルの複雑さにペナルティを課すこと」と定義し、「重みが大きくなると損失が膨らむため、過学習が抑えられる」と理由を書く。その上で「Ridge回帰が代表例で、正則化係数λを0.1から10に上げると、パラメータの絶対値は小さくなる」という具体例を添える。この型を意識すると、「機械学習モデルを自分で書けるか」と聞かれたときに、単に「書ける」と答えるのではなく、「損失関数の最小化として最急降下法を実装すれば、基礎的なモデルは書ける」と論理的に答えられる。演習問題にも「过拟合とは何か」「L1正則化がスパース解を生むのはなぜか」といった出題が多いが、いずれも定義、理由、例、注意の4点で回答を埋められる。def f1_from_confusion(tp, fp, tn, fn): precision tp / (tp fp) recall tp / (tp fn) f1 2 * precision * recall / (precision recall) return precision, recall, f1 tp, fp, tn, fn 15, 25, 55, 5 precision, recall, f1 f1_from_confusion(tp, fp, tn, fn) print(fprecision{precision}, recall{recall}, f1{f1}) # precision0.375, recall0.75, f10.5このコードは混同行列から適合率・再現率・F1を求めるもので、評価指標の問題が出たときに機械的に計算できる。引数のtpとfpを逆にするとprecisionとrecallが入れ替わり、結果が大きく変わる。答案に書くときは「tpは実際に陽性で、予測も陽性だった数」という定義を先に明記し、混同行列の表から各値を漏れなく読み取ること。2.2 過学習対策の比較表で答えの抜けを防ぐ過学習への対策は、単語だけ列挙するのではなく「どの仕組みで」「どの効果があり」「どのような副作用があるか」まで含めて書く必要がある。この比較表を自分で用意しておけば、記述問題で項目の抜けがなくなる。対策仕組み効果注意点L2正則化重みの二乗和を損失に加える重みの値を均等に小さくする特徴量を完全に0にはしないL1正則化重みの絶対値を損失に加える一部の重みを0にするλの調整が難しい交差検証データを分割して評価を繰り返す汎化性能を正確に見積もる分割数が小さいと分散が大きいDropoutニューラルネットのノードを確率的に無効化特定ノードへの依存を防ぐ推論時は無効化しないデータ拡張学習データを変形して増やす入力の多様性を増し、過学習を抑える適用できるデータの種類が限られるこの表を答案にそのまま載せる必要はない。比較表を作っておくと「L2正則化の副作用は何か」という形で応用問題に切り替わっても怖くない。さらに「损失函数 の設計がモデルの性能を左右する理由」を説明する記述では、経験リスク最小化と構造リスク最小化の違いに触れると得点の幅が広がる。結構込み入った話になるため、この章でしっかりコードと表を組み合わせて理解しておくと後で効く。3. 机器学习计算问题の解き方情報利得・ナイーブベイズ・最小二乗3.1 情報利得を天気データで手計算する決定木のID3アルゴリズムで頻出なのが、情報利得の計算だ。天気のデータセットを例にして、属性「天気」で分割する前後でエントロピーがどれだけ減るかを求める。問題文に14個のサンプルがあり、そのうち再生が9個、不再生が5個、天気の内訳が晴れ5個・曇り4個・雨5個という設定がよく使われる。天気再生不再生合計晴れ325曇り404雨235合計9514この表から情報利得を計算するコードは次のようになる。import numpy as np def entropy(x): x np.array(x, dtypefloat) s x / x.sum() return -np.sum(s * np.log2(s 1e-15)) base entropy([9, 5]) # 分割前のエントロピー 0.9391 sunny entropy([3, 2]) # 0.9710 overcast entropy([4, 0]) # 0.0 rainy entropy([2, 3]) # 0.9710 weighted 5/14 * sunny 4/14 * overcast 5/14 * rainy gain base - weighted print(fbase{base:.4f}, weighted{weighted:.4f}, gain{gain:.4f}) # base0.9391, weighted0.6935, gain0.2456この計算で重要なのは、加重平均の重みに「各属性値のサンプル数 ÷ 全体のサンプル数」を使う点だ。曇りのエントロピーは0になるが、サンプル数が4なので全体に与える影響は限られる。情報利得が大きい属性ほど、分割後の不純度が小さくなる。決定木の選択問題では、この値を複数の属性で比較して最大のものを選べばよい。 1e-15はlog(0)がマイナス無限大になるのを防ぐための微小値で、答案を書くときは「確率0の項は0として扱う」と注記しておくと採点者に伝わりやすい。3.2 ナイーブベイズで事後確率の正規化を確認するベイズ分類の問題では、事前確率と尤度から事後確率を求め、最後に全体の和が1になるように正規化する。問いでよく見落とされるのが、分子を計算して終わりにしてしまうケースだ。リンゴとバナナの分類を例にすると、リンゴが4個、バナナが3個、特徴は「赤い」「丸い」の2つとする。リンゴのうち赤いものが3個、丸いものが4個、バナナのうち赤いものが1個、丸いものが1個という条件をコードで計算する。prior_apple 4 / 7 prior_banana 3 / 7 p_red_apple 3 / 4 p_round_apple 4 / 4 p_red_banana 1 / 3 p_round_banana 1 / 3 score_apple prior_apple * p_red_apple * p_round_apple score_banana prior_banana * p_red_banana * p_round_banana total score_apple score_banana post_apple score_apple / total post_banana score_banana / total print(fapple{post_apple:.4f}, banana{post_banana:.4f}) # apple0.9000, banana0.1000特徴が独立であるという仮定のもとで、各特徴の条件付き確率をかけ合わせるのがナイーブベイズの計算だ。ここでscore_appleとscore_bananaを比べるだけで終えるのではなく、確率の総和が1になることを確認する癖をつける。また、もしバナナに「丸い」ものが1つもなかった場合、p_round_bananaが0になりscore_bananaが0となってしまう。このゼロ頻度問題にはラプラス平滑化を適用する、という記述まで書ければ応用問題にも対応できる。3.3 線形回帰を最小二乗法で解く線形回帰の計算問題は、行列の形で解くことが多い。データ点 (1,2), (2,3), (3,5) に対して y ax b のパラメータを求めよ、という問題なら、計画行列Xを作り(X^T X)^(-1) X^T yを計算する。import numpy as np X np.c_[np.ones(3), [1, 2, 3]] y np.array([2, 3, 5]) w, residuals, rank, _ np.linalg.lstsq(X, y, rcondNone) print(w) # [0.333..., 1.5]np.c_で切片用の1の列と説明変数の列を結合している。w[0]が切片b、w[1]が傾きaになるため、この問題の答えは y 1.5x 1/3 だ。行列で解くときの確認方法として、手計算で(X^T X)と(X^T y)を求め、逆行列をかけた結果が一致するかを見るとよい。pythonのコードだけに頼ると、行列の掛け算順序を誤解したまま答えを出す危険がある。答案には「Xは (3,2) 行列、, yは (3,) ベクトル。(X^T X)は (2,2) になる」という次元の記述を添えると採点者に丁寧な印象を与えられる。4. 答案docxをpython-docxで組み立てる数式・図・表の配置4.1 答案docxに含めるべき4つの要素学習の記録として残す場合も、提出用の答案を作る場合も、docxの各問題には「問題文の再掲」「解答の仮定」「計算プロセス」「最終結果」の4つを対応付ける。特に仮定の明示は重要で、ベイズ分類であれば「特徴は独立と仮定する」、線形回帰であれば「誤差項の分散は均一と仮定する」と書くだけで論理の飛躍がなくなる。計算プロセスは式を羅列するのではなく、どのような順序で数を当てはめたかを短い注釈で示す。4.2 python-docxで見出し・図・表を持つ文書を生成するpython-docxを使えば、Markdownのように簡単にWord文書を生成できる。最小二乗の計算結果を図と表でまとめた答案docxは次のような流れで作る。from docx import Document from docx.shared import Inches import matplotlib.pyplot as plt import numpy as np x np.array([1, 2, 3]) y np.array([2, 3, 5]) xs np.linspace(0, 4, 100) plt.plot(x, y, o, labeldata) plt.plot(xs, 1.5 * xs 1/3, -, labelfit) plt.legend() plt.savefig(regression.png, dpi150) doc Document() doc.add_heading(机器学习原理及应用 练习题答案, 0) doc.add_heading(第3题 线性回归系数, level1) p doc.add_paragraph() p.add_run(解).bold True p.add_run(假设模型为 y ax b用最小二乘估计参数。) doc.add_picture(regression.png, widthInches(4.5)) table doc.add_table(rows3, cols2) table.style Light Grid Accent 1 cells [(b, 1/3), (a, 1.5)] for i, (name, value) in enumerate(cells, start1): table.rows[i].cells[0].text name table.rows[i].cells[1].text value doc.save(answers.docx)add_headingの第2引数は見出しレベルで、0を指定すると文書タイトル扱いになる。add_pictureは直前の段落の後ろに画像を挿入するため、計算説明の後に配置したい場合は、図を挿入する前に説明用の段落を追加しておく。表はadd_tableで作るが、styleを設定しておかないと罫線のない表になりWord上で見づらくなる。Wordのバージョンによって使えるスタイル名が異なるため、実行後にtable.styleがエラーになる場合は標準のTable Gridに変更するとよい。4.3 数式はWordの数式エディタとPandocのどちらかで統一するpython-docxは段落や表の操作に強いが、数式の挿入はやや面倒だ。数式が少ない答案なら、Wordを開いてAltを押した後にと打鍵して数式エディタを起動し、そのまま直接入力するのが最も確実である。数式が多い場合は、Markdownで本文を書いてPandocで変換する方法が使いやすい。pandoc answers.md -o answers.docxこのコマンドは、Markdown内の$y ax b$という数式をWordのネイティブな数式オブジェクトに変換する。答案全体を一度にdocx化でき、途中の.docxが壊れてもanswers.mdが残っていれば再生成できる。Pandocを使う場合は、画像ファイルがMarkdownと同じディレクトリにないと変換後のdocxに画像が埋め込まれない点に注意する。5. 答案の検証極端値・混同行列・対数底の典型ミスを潰す5.1 計算ミスを発見する5つのチェック項目手計算やPythonのスクリプトで得た答えをそのまま提出する前に、次のチェックリストで検証する。特に個人で学習しているときは、正解を誰にも確認してもらえないため、この工程が最大の採点者になる。チェック対象よくあるミス検証方法対数の底log10でエントロピーを計算np.log2を使い、結果が0〜1に収まるか確認確率の総和事後確率を合計すると1にならない正規化の分母を明示する混同行列の配置tpとfpを取り違えるtpは実際陽性かつ予測陽性、fpは実際陰性かつ予測陽性と表に書く行列の次元Xとyの掛け算の順序を誤るXの列数とyの要素数が一致するか確認極端値全サンプルが同じクラスでエントロピーが0になるentropy([1, 0]) を実行してみる5.2 エントロピー関数の境界値を確認する情報利得の計算で使ったエントロピー関数が正しく実装されているかを試すには、境界値を入れてみるのが手軽だ。全サンプルが同一クラスならエントロピーは0、2クラスが半数ずつなら1になる。e0 entropy([1, 0]) e1 entropy([1, 1]) print(e0, e1) # 0.0 1.0この2つが少しでもずれるなら、対数の底やnp.sumの分母の取り方が間違っている可能性が高い。情報利得はこのエントロピーの差で計算するため、ここを信頼できないと決定木の問題すべてが不安定になる。実際の演習問題では、検証のために、コード上でエントロピー関数を「確率の合計で割る」仕様に統一しておくのが安全だ。この極端値チェックは数式を答案に写し間違えているときにも有効で、手書きで求めた値とコードの出力が一致するかを確かめる最初の一歩として試してほしい。本文还有配套的精品资源点击获取
返回列表