100-Days-Of-ML-Code 实战指南:从数据预处理到深度学习的百天机器学习编码挑战
100-Days-Of-ML-Code 实战指南从数据预处理到深度学习的百天机器学习编码挑战【免费下载链接】100-Days-Of-ML-Code100 Days of ML Coding项目地址: https://gitcode.com/gh_mirrors/10/100-Days-Of-ML-Code本篇技术指南以开源仓库 100-Days-Of-ML-Code 为对象完整梳理其从 Day 1 到 Day 54 的机器学习编码学习路线既有 Day 1/2/3/6/11/13/25/34 八个可直接复跑的分类与回归实战代码含数据预处理、特征缩放、模型拟合与可视化全流程也有覆盖 SVM 核技巧、朴素贝叶斯、深度学习专项、线性代数/微积分数学复习、NumPy/Pandas/Matplotlib 工具链与无监督聚类等内容的学习笔记脉络。读完本文你将掌握一套每章一个算法、代码即笔记、信息图辅助理解的机器学习自学范式并能在当前 scikit-learn 版本环境下重现全部示例。项目概览什么是 100 Days of ML Coding100-Days-Of-ML-Code 是一个由 Avik Jain 发起、源自 Siraj RavalllSourcell提议的机器学习编码百日挑战仓库见 README.md。它的核心理念是不只看理论而是每天动手写代码实现一个机器学习知识点用连续的 100 天建立起从数据预处理到神经网络、从监督学习到无监督学习的完整实战地图。仓库内容组织为三大板块Code/每日实战代码的 Markdown 笔记完整可运行的 Python scikit-learn 示例Info-graphs/对应主题的信息图infographic用于直观理解算法流程datasets/全部示例所使用的公开数据集Other Docs/可视化结果截图与补充资料。README 中所有代码笔记和信息图均可在仓库内按相对路径找到下文会逐一给出对应链接。数据集一览四个 CSV 支撑全部示例仓库 datasets/ 目录提供了四个 CSV 数据集所有代码示例都基于它们运行结构如下已核对真实表头数据集文件字段典型用途datasets/Data.csvCountry, Age, Salary, PurchasedDay 1 数据预处理缺失值、分类编码datasets/studentscores.csvHours, ScoresDay 2 简单线性回归学习时长 vs 分数datasets/50_Startups.csvRD Spend, Administration, Marketing Spend, State, ProfitDay 3 多元线性回归预测初创公司利润datasets/Social_Network_Ads.csvUser ID, Gender, Age, EstimatedSalary, PurchasedDay 6/11/13/25/34 分类算法SUV 购买预测其中Social_Network_Ads.csv是出现频率最高的数据集记录社交网络用户的性别、年龄与预估薪资最后一列Purchased标记该用户是否购买了新款豪华 SUV。所有分类实战均取 Age第 2 列与 EstimatedSalary第 3 列两个特征、Purchased第 4 列作为标签目标是基于年龄与预估薪资预测购买意愿属于典型的二维分类问题。实战代码主线八个可直接运行的机器学习示例Code/ 目录下的七个 Markdown 文档覆盖了数据预处理、线性回归简单/多元、逻辑回归、K 近邻、支持向量机、决策树与随机森林构成一条完整的数据预处理 → 监督学习建模 → 评估 → 可视化主线。Day 1数据预处理六步法Code/Day 1_Data PreProcessing.md数据预处理六步信息图数据预处理是整个机器学习流程的地基文档将其拆解为六个步骤基于Data.csv展开Step 1导入库import numpy as np import pandas as pdStep 2导入数据集——用iloc切片分离特征矩阵 X 与标签向量 Ydataset pd.read_csv(Data.csv) X dataset.iloc[ : , :-1].values Y dataset.iloc[ : , 3].valuesStep 3处理缺失数据——用均值策略填充NaN值from sklearn.preprocessing import Imputer imputer Imputer(missing_values NaN, strategy mean, axis 0) imputer imputer.fit(X[ : , 1:3]) X[ : , 1:3] imputer.transform(X[ : , 1:3])strategy mean表示用该列均值填补缺失值axis 0表示按列特征方向计算。Step 4编码分类数据——先把国家名文本映射为数字再通过独热编码One-Hot生成哑变量避免模型把类别编号当作有大小关系的数值from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_X LabelEncoder() X[ : , 0] labelencoder_X.fit_transform(X[ : , 0])创建哑变量并对标签编码onehotencoder OneHotEncoder(categorical_features [0]) X onehotencoder.fit_transform(X).toarray() labelencoder_Y LabelEncoder() Y labelencoder_Y.fit_transform(Y)Step 5划分训练集与测试集——test_size 0.2表示 20% 数据留作测试random_state 0固定随机种子保证可复现from sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test train_test_split( X , Y , test_size 0.2, random_state 0)Step 6特征缩放——用StandardScaler对特征做标准化使不同量纲年龄、薪资的特征落在同一尺度避免数值较大的特征主导模型from sklearn.preprocessing import StandardScaler sc_X StandardScaler() X_train sc_X.fit_transform(X_train) X_test sc_X.fit_transform(X_test)这一六步流程导入 → 清洗 → 编码 → 划分 → 缩放在后续所有分类示例中被反复复用是贯穿全仓库的公共前置流水线。Day 2简单线性回归Code/Day2_Simple_Linear_Regression.md基于studentscores.csv学习小时数 → 考试分数演示单变量回归四步完成从数据到可视化import pandas as pd import numpy as np import matplotlib.pyplot as plt dataset pd.read_csv(studentscores.csv) X dataset.iloc[ : , : 1 ].values Y dataset.iloc[ : , 1 ].values from sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test train_test_split( X, Y, test_size 1/4, random_state 0)拟合模型并预测from sklearn.linear_model import LinearRegression regressor LinearRegression() regressor regressor.fit(X_train, Y_train) Y_pred regressor.predict(X_test)可视化训练集与测试集的拟合效果——红点为真实样本蓝线为回归直线plt.scatter(X_train , Y_train, color red) plt.plot(X_train , regressor.predict(X_train), color blue) plt.scatter(X_test , Y_test, color red) plt.plot(X_test , regressor.predict(X_test), color blue)Day 3多元线性回归与虚拟变量陷阱Code/Day3_Multiple_Linear_Regression.md基于50_Startups.csv用 RD 支出、行政管理支出、市场支出与所在州分类变量预测利润。除了复用 Day 1 的预处理套路外本示例引入两个关键点编码分类特征State 列第 3 列并生成哑变量from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder LabelEncoder() X[: , 3] labelencoder.fit_transform(X[ : , 3]) onehotencoder OneHotEncoder(categorical_features [3]) X onehotencoder.fit_transform(X).toarray()规避虚拟变量陷阱哑变量编码后k 个类别会生成 k 个取值恒为 0/1 的列其中任意一列可以由其余列线性表示导致多重共线性。解决方法是手动丢弃第一列X X[: , 1:]随后与 Day 2 相同的流程划分数据集并拟合from sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test train_test_split(X, Y, test_size 0.2, random_state 0) from sklearn.linear_model import LinearRegression regressor LinearRegression() regressor.fit(X_train, Y_train) y_pred regressor.predict(X_test)Day 6逻辑回归与混淆矩阵Code/Day 6 Logistic Regression.md逻辑回归是线性分类器——在二维特征空间里两类用户买/不买 SUV由一条直线划分。示例用Social_Network_Ads.csv的 Age、EstimatedSalary 两列做特征测试集比例 0.25import numpy as np import matplotlib.pyplot as plt import pandas as pd dataset pd.read_csv(Social_Network_Ads.csv) X dataset.iloc[:, [2, 3]].values y dataset.iloc[:, 4].values from sklearn.cross_validation import train_test_split X_train, X_test, y_train, y_test train_test_split(X, y, test_size 0.25, random_state 0) from sklearn.preprocessing import StandardScaler sc StandardScaler() X_train sc.fit_transform(X_train) X_test sc.transform(X_test)注意此处与 Day 1 的差异训练集用fit_transform测试集只用transform复用训练集学到的均值/标准差避免测试数据信息泄漏到缩放器中。这一点在后续 K-NN、SVM、决策树、随机森林示例中保持一致。拟合、预测与评估from sklearn.linear_model import LogisticRegression classifier LogisticRegression() classifier.fit(X_train, y_train) y_pred classifier.predict(X_test) from sklearn.metrics import confusion_matrix cm confusion_matrix(y_test, y_pred)混淆矩阵给出模型在测试集上的正确与错误预测计数是评估分类模型是否真正学会的最直观指标Day 11K 近邻K-NNCode/Day 11 K-NN.mdK-NN 是惰性学习lazy learning的代表训练阶段几乎不做计算预测时根据样本点与训练集中最近 K 个邻居的投票决定类别。示例使用 Minkowski 距离且p 2即欧氏距离from sklearn.neighbors import KNeighborsClassifier classifier KNeighborsClassifier(n_neighbors 5, metric minkowski, p 2) classifier.fit(X_train, y_train)其中n_neighbors 5取 5 个最近邻metric minkowski指定距离度量族p 2表示 2 阶范数欧氏距离。随后与逻辑回归相同的预测与混淆矩阵流程y_pred classifier.predict(X_test) from sklearn.metrics import confusion_matrix cm confusion_matrix(y_test, y_pred)Day 13支持向量机SVMCode/Day 13 SVM.mdSVM 的目标是找到将两类样本分隔、且间隔margin最大化的最优超平面。本示例先使用线性核kernel linearfrom sklearn.svm import SVC classifier SVC(kernel linear, random_state 0) classifier.fit(X_train, y_train) y_pred classifier.predict(X_test) from sklearn.metrics import confusion_matrix cm confusion_matrix(y_test, y_pred)该文档还给出了完整的决策边界可视化代码用网格化采样绘制分类区域训练集与测试集各画一张from matplotlib.colors import ListedColormap X_set, y_set X_train, y_train X1, X2 np.meshgrid(np.arange(start X_set[:, 0].min() - 1, stop X_set[:, 0].max() 1, step 0.01), np.arange(start X_set[:, 1].min() - 1, stop X_set[:, 1].max() 1, step 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha 0.75, cmap ListedColormap((red, green))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set j, 0], X_set[y_set j, 1], c ListedColormap((red, green))(i), label j) plt.title(SVM (Training set)) plt.xlabel(Age) plt.ylabel(Estimated Salary) plt.legend() plt.show()README 中 Day 16 还记录了使用核技巧kernel trick的实现——通过核函数把数据映射到更高维空间寻找最优超平面用于处理线性不可分数据。Day 25决策树分类Code/Day 25 Decision Tree.md决策树通过递归的特征阈值划分来分类。示例使用criterion entropy即以信息熵作为分裂质量的衡量标准另一常用选项是ginifrom sklearn.tree import DecisionTreeClassifier classifier DecisionTreeClassifier(criterion entropy, random_state 0) classifier.fit(X_train, y_train) y_pred classifier.predict(X_test) from sklearn.metrics import confusion_matrix cm confusion_matrix(y_test, y_pred)决策树信息图Day 34随机森林Code/Day 34 Random_Forest.md随机森林通过集成多棵决策树bootstrap 抽样 特征随机子集降低单棵树的过拟合风险。示例用n_estimators 10构建 10 棵树from sklearn.ensemble import RandomForestClassifier classifier RandomForestClassifier(n_estimators 10, criterion entropy, random_state 0) classifier.fit(X_train, y_train) y_pred classifier.predict(X_test) from sklearn.metrics import confusion_matrix cm confusion_matrix(y_test, y_pred)随机森林信息图学习笔记主线Day 5 之后的扩展主题在八段实战代码之外README 按天记录了理论与工具链的进阶脉络可按主题归为五条线分类算法深化Day 5、8、9、10、14、16Day 5深入逻辑回归背后的数学——损失函数cost function的计算与用梯度下降最小化预测误差Day 8推荐阅读逻辑回归的详细数学推导资料Day 9–10理解 SVM 的直观思想及其在分类问题中的应用并开始实现 K-NNDay 14用 scikit-learn 的SVC在线性可分数据上实现 SVM即 Code/Day 13 SVM.mdDay 16使用核技巧实现 SVM将数据映射到高维以寻找最优超平面。朴素贝叶斯与统计学习理论Day 13、15、24Day 13学习朴素贝叶斯分类器Naive Bayes ClassifierDay 15了解朴素贝叶斯的多个变体并开始 Bloomberg 机器学习课程黑盒机器学习覆盖预测函数、特征提取、学习算法、性能评估、交叉验证、样本偏差、非平稳性、过拟合与超参数调优Day 24学习输入空间、行动空间、结果空间、预测函数、损失函数与假设空间等统计学习理论核心概念。深度学习专项Day 17–20、35–42Day 17–18Coursera 深度学习专项课程 1 周将逻辑回归作为神经网络实现并用 Python 实现神经网络Day 20课程 2 的改进深度神经网络超参数调优、正则化与优化Day 35–383Blue1Brown 神经网络四章系列——神经网络是什么、梯度下降如何学习、反向传播在做什么、反向传播的微积分Day 39–42基于 Python / TensorFlow / Keras 的深度学习实战教程涵盖自建数据加载、卷积神经网络CNN与 TensorBoard 模型分析。数学基础复习Day 19、22、26–32Day 19、22加州理工 CS 156Yaser Abu-Mostafa 教授机器学习课程学习感知机算法与 Hoeffding 不等式学习是否可行Day 26–293Blue1Brown《线性代数的本质》全集——向量、线性组合、基向量、线性变换、矩阵乘法、行列式、逆矩阵、列空间/零空间、点积、叉积、基变换、特征向量与特征值、抽象向量空间Day 30–32《微积分的本质》系列——导数、链式法则、乘积法则、隐函数微分、极限、积分与高阶导数。数据处理工具链Day 45–53Day 45–47Python Data Science Handbook 第 2 章 NumPy——数据类型、数组基础、通用函数ufunc、聚合、广播、布尔掩码、花式索引、排序与结构化数组Day 48–50第 3 章 Pandas——对象、索引与选择、缺失值处理、层级索引、Concat/Append、Merge/Join、聚合分组、透视表、向量化字符串操作与时间序列Day 51–53第 4 章 Matplotlib——折线图、散点图、误差条、密度等高线图、直方图、图例/颜色条定制、多子图、文本标注与三维绘图。无监督学习Day 43–44、54Day 43转向无监督学习学习聚类Clustering与 K-Means 算法并附 K-Means 可视化动画帮助理解Day 44实现 K-Means 聚类README 中该条代码链接为空代码未收录Day 54学习层次聚类Hierarchical Clustering。运行环境与版本注意事项仓库中的代码以 scikit-learn 早期版本 API 编写在运行前需要注意以下兼容性问题这正是代码即笔记的仓库与当前环境的差异点sklearn.cross_validation已在 scikit-learn 0.20 起被移除train_test_split现位于sklearn.model_selection应改为from sklearn.model_selection import train_test_splitsklearn.preprocessing.Imputer已废弃并被sklearn.impute.SimpleImputer取代均值填充可写为SimpleImputer(strategymean)OneHotEncoder(categorical_features[...])的参数categorical_features已在新版本移除需改用ColumnTransformer或先编码再手动构造哑变量SVC、KNeighborsClassifier、DecisionTreeClassifier、RandomForestClassifier、LogisticRegression等模型接口稳定其核心参数kernel、n_neighbors、criterion、n_estimators、test_size、random_state在新版本中依然有效。小结一份可复现的机器学习自学路线100-Days-Of-ML-Code 的价值不在于理论体系的完备性而在于它提供了一条**每天一个算法、代码即时可跑**的动手学习路径以 datasets/ 四个真实 CSV 为统一素材从 Day 1 数据预处理 的六步流水线出发依次穿越简单/多元线性回归、逻辑回归、K-NN、SVM、决策树与随机森林八段完整实现再以数学复习、工具链与深度学习笔记作为纵深扩展最终落到 K-Means 与层次聚类等无监督话题。对于希望建立能写代码的机器学习基础的初学者直接从 Code/ 目录按天顺序复跑代码、对照 Info-graphs/ 信息图理解流程即可获得一套高质量、可迁移的实战训练。【免费下载链接】100-Days-Of-ML-Code100 Days of ML Coding项目地址: https://gitcode.com/gh_mirrors/10/100-Days-Of-ML-Code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考