手撕决策树:用Python搞定贷款审批
这次实验的任务是用一个贷款审批的数据集,写代码训练一个模型,让电脑学会怎么自动判断该不该给一个人贷款。我们会用上两种经典的方法——ID3 和 Gini 指数,看看它们各自有啥门道。 任务背景:当个AI审批官想象一下,银行每天都收到一大堆贷款申请,要是都靠人工一个个看,效率也太低了。我们的目标就是用机器学习,让这个过程自动化。手头有16条已经审批过的老数据,里面记录了申请人的年龄、有无工作、有无房产和信誉情况,以及最终是否获得了贷款。 数据长啥样? 训练集 (dataset.csv): 16条数据,用来教我们的模型。 测试集 (testset.csv): 7条新数据,用来考考我们的模型学得怎么样。 特征 (已经转成了数字): 年龄段: 0 (青年), 1 (中年), 2 (老年) 有没有工作: 0 (没), 1 (有) 有没有房子: 0 (没), 1 (有) 信贷情况: 0 (一般), 1 (好), 2 (非常好) 目标: 给不给贷款: 0 (不给), 1 (给) 理论速成——决策树到底在想啥?决策树这东西,说白了就是模拟人做决定的过程。比如你想想要不要出门,可能会先看...
INMP441 I²S 麦克风在树莓派上的使用
在这篇文章中,我将在 Raspberry Pi 4B 上使用 INMP441 麦克风模块,通过 I²S 接口实现音频录制。 一、硬件接线INMP441 是一款 I²S 数字麦克风,使用 3.3V 供电下面是与 树莓派 GPIO 的连接方式: 树莓派引脚 INMP441 引脚 说明 3V3 VDD 电源 GND GND 地线 GPIO18(物理脚 12) SCK I²S 时钟(BCLK) GPIO19(物理脚 35) LRCL / WS 左右声道时钟(LRCLK) GPIO20(物理脚 38) SD 麦克风输出数据(接 Pi 的 DIN) ⚙️ L/R(SEL)引脚说明: 接 GND = 左声道 接 3V3 = 右声道 若使用两只麦克风,可分别接左、右实现立体声。 单声道接线示意图如下:立体声左右声道接线示意图如下: 二、I²S 协议简介与信号解析在深入树莓派配置前,我们先了解一下 I²S(Inter-IC Sound) 协议的基本原理。I²S 是一种专门用于 数字音频数据传输 的串行总线标准,由 ...
从零实现KNN算法,打造智能推荐系统
你有没有想过,那些约会软件和推荐系统是怎么做到“比你还懂你”的?这背后没有玄学,而是一系列有趣而有效的算法。今天,我们化身“代码月老”,亲手揭开一种经典方法——K-近邻(KNN)的神秘面纱。 这篇教程完整走一遍机器学习的小项目:从原始文本数据出发,完成清洗与转换;用纯 Python 与 NumPy 实现 KNN 核心;再用专业工具评估模型表现,看看它到底有多靠谱。 故事背景:帮海伦找到她的“菜”主角海伦在一个约会网站上想提高推荐质量。她把过往的约会体验分为三类: 魅力十足 (largeDoses) 感觉一般 (smallDoses) 敬而远之 (didntLike) 她认为评价主要和三个特征相关: 每年获得的飞行常客里程数(是否热爱旅行) 玩视频游戏所耗时间百分比(娱乐偏好) 每周消费的冰淇淋公升数(生活习惯) 我们的目标:输入这三项特征,自动预测她对新对象的喜好类别。 数据探索与预处理在机器学习里,数据就是“食材”。食材质量常常决定了模型的上限。我们的原始数据在 datingTestSet.txt。 数据加载:从文本到矩阵计算机不直接吃文本。我们先写个函数,把文件读出来...
Anaconda下载、安装与环境配置
1. 什么是 Anaconda?为什么选择它?想象一下,你要做一个复杂的木工项目。你不仅需要木头(Python),还需要锯子、锤子、螺丝刀、尺子(各种库,如 NumPy, Pandas, Matplotlib)等等。 你可以选择去不同的五金店一家一家地买齐所有工具,但这个过程很繁琐,而且工具之间可能还不匹配。(依赖爆炸) 它将 Python 解释器和成百上千个常用的科学计算库(如 NumPy, Pandas, Scikit-learn, Matplotlib 等)打包在一起。你只需要安装 Anaconda,就相当于拥有了一个装备齐全的“工作室”,可以直接开工,省去了到处寻找和安装依赖库的烦恼。 那么代价是什么呢?这玩意真是太重了 对于新手来说,选择 Anaconda 的核心优势是: 一键安装: 避免了繁琐的库安装和版本冲突问题。 强大的环境管理: 可以为不同的项目创建独立的“工作区”(环境),让项目之间互不干扰。 自带实用工具: 包含了 Jupyter Notebook, Spyder 等广受欢迎的开发工具。 所以接下来我们会尝试安装 2. 下载 Anaconda首先,我...
Windows下Python venv的创建与使用
为什么要使用虚拟环境?想象一下,你有两个乐高项目:一个是千年隼号,另一个是霍格沃茨城堡。 千年隼号需要很多灰色、白色的特殊零件。 霍格沃茨城堡则需要很多棕色、黄色的砖块。 如果你把所有零件都倒在一个大箱子里,会发生什么?当你拼装千年隼时,可能会错拿城堡的零件;当你想把城堡的零件分享给朋友时,却很难从大箱子里把它们都找出来。这简直是一场灾难! Python 也是如此: 项目 A(千年隼)可能需要 requests 库的 2.25.0 版本。 项目 B(霍格沃茨)可能需要 requests 库的另一个版本 2.28.0。 如果你把所有库(零件)都安装在全局的 Python 环境(大箱子)里,这两个项目就会发生冲突,导致一个(或两个都)无法正常运行。 虚拟环境就是为了解决这个问题而生的。它就像是为每个项目准备一个独立的零件盒。 千年隼号的零件放在“千年隼专用盒”里。 霍格沃茨城堡的零件放在“霍格沃茨专用盒”里。 这两个盒子互不干扰,完美隔离。在 Python 中,venv 就是创建这种“独立零件盒”的官方工具。 确认你的Python已就绪在开始之前,请确保你已经在 Wind...