<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>高级 on 老张开工了</title>
    <link>/%E9%AB%98%E7%BA%A7/</link>
    <description>Recent content in 高级 on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/%E9%AB%98%E7%BA%A7/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>异步编程与 asyncio</title>
      <link>/posts/2026/05/asyncio/</link>
      <pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/asyncio/</guid>
      <description>异步编程概述 asyncio 是 Python 用于编写并发代码的标准库，使用 async/await 语法。它是处理 I/O 密集型高并发任务的最佳方案——比如 Web 服务器、爬虫、API 调用等。&#xA;与多线程不同，asyncio 在单线程内实现并发，没有线程切换开销和竞态条件问题。与多进程不同，asyncio 可以轻松处理数万个并发连接。&#xA;核心概念 协程（Coroutine） 协程是可以暂停执行和恢复执行的函数，是 async/await 的基础：&#xA;import asyncio # 定义协程函数 async def say_hello(): print(&amp;#34;你好&amp;#34;) await asyncio.sleep(1) # 模拟 I/O 等待 print(&amp;#34;世界&amp;#34;) # 调用协程函数返回协程对象，不会执行 coro = say_hello() print(type(coro)) # &amp;lt;class &amp;#39;coroutine&amp;#39;&amp;gt; # 运行协程 asyncio.run(say_hello()) 关键区别：&#xA;普通函数调用：func() → 立即执行并返回结果 协程函数调用：async_func() → 返回协程对象，需要 await 或 asyncio.run await 关键字 await 用于等待一个 awaitable 对象（协程、Task、Future）完成：&#xA;import asyncio async def fetch_data(): print(&amp;#34;开始获取数据...&amp;#34;) await asyncio.</description>
    </item>
    <item>
      <title>并发编程：多线程与多进程</title>
      <link>/posts/2026/05/concurrency/</link>
      <pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/concurrency/</guid>
      <description>并发编程概述 并发编程是提升程序性能的关键手段。Python 提供了三种主要的并发模型：&#xA;多线程（threading）：适用于 I/O 密集型任务 多进程（multiprocessing）：适用于 CPU 密集型任务 异步（asyncio）：适用于高并发 I/O 任务（下一章详解） 选择合适的并发模型至关重要——选错了不仅不会提升性能，反而可能让程序更慢。&#xA;理解并发与并行 # 并发：多个任务交替执行（看起来像同时） # 并行：多个任务真正同时执行（多核 CPU） # 类比： # - 并发 = 一个人交替做三件事 # - 并行 = 三个人各做一件事 线程 vs 进程 特性 线程 (Thread) 进程 (Process) 内存共享 共享同一进程内存 独立内存空间 创建开销 较低 较高 通信方式 直接访问共享变量 Queue/Pipe/共享内存 适合场景 I/O 密集型 CPU 密集型 GIL 影响 受 GIL 限制 不受 GIL 限制 安全性 需要锁来保护共享数据 天然隔离 GIL 详解 GIL（Global Interpreter Lock，全局解释器锁）是 Python 中最重要的并发概念：</description>
    </item>
    <item>
      <title>常用标准库精讲</title>
      <link>/posts/2026/05/standard-library/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/standard-library/</guid>
      <description>Python 标准库的威力 Python 常被称为&amp;quot;自带电池&amp;quot;（Batteries Included）的语言，因为它的标准库涵盖了从数据结构到文件处理、从网络编程到数据序列化的方方面面。熟练掌握标准库可以让你在绝大多数场景下无需安装任何第三方包就能高效完成任务。&#xA;本章将精选最常用的标准库模块进行深入讲解。&#xA;collections：扩展数据结构 collections 模块提供了 Python 内置数据类型的升级版，在日常编码中使用频率极高。&#xA;defaultdict：带默认值的字典 from collections import defaultdict # 普通字典访问不存在的 key 会报 KeyError # defaultdict 自动为不存在的 key 创建默认值 # 统计字符出现次数 text = &amp;#34;hello world&amp;#34; counter = defaultdict(int) for char in text: counter[char] += 1 print(counter) # defaultdict(&amp;lt;class &amp;#39;int&amp;#39;&amp;gt;, {&amp;#39;h&amp;#39;: 1, &amp;#39;e&amp;#39;: 1, &amp;#39;l&amp;#39;: 3, &amp;#39;o&amp;#39;: 2, &amp;#39; &amp;#39;: 1, &amp;#39;w&amp;#39;: 1, &amp;#39;r&amp;#39;: 1, &amp;#39;d&amp;#39;: 1}) # 用列表作为默认值（分组） students = [ (&amp;#34;A班&amp;#34;, &amp;#34;小明&amp;#34;), (&amp;#34;B班&amp;#34;, &amp;#34;小红&amp;#34;), (&amp;#34;A班&amp;#34;, &amp;#34;小刚&amp;#34;), (&amp;#34;B班&amp;#34;, &amp;#34;小丽&amp;#34;), ] classes = defaultdict(list) for class_name, student in students: classes[class_name].</description>
    </item>
    <item>
      <title>日期与时间处理</title>
      <link>/posts/2026/05/datetime/</link>
      <pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/datetime/</guid>
      <description>Python 中的日期和时间 日期和时间处理是编程中常见的需求——日志记录、数据统计、任务调度、业务逻辑计算，几乎每个项目都离不开它。Python 提供了多个内置模块来处理日期和时间，其中 datetime 是最核心、最常用的模块。&#xA;datetime 模块核心类 datetime 模块包含以下几个核心类：&#xA;类 说明 示例 date 日期（年、月、日） date(2026, 5, 21) time 时间（时、分、秒、微秒） time(14, 30, 0) datetime 日期+时间 datetime(2026, 5, 21, 14, 30) timedelta 时间差 timedelta(days=7) timezone 时区 timezone(timedelta(hours=8)) 创建日期和时间对象 from datetime import date, time, datetime, timedelta # 创建日期 d = date(2026, 5, 21) print(d) # 2026-05-21 print(d.year) # 2026 print(d.month) # 5 print(d.day) # 21 # 创建时间 t = time(14, 30, 15, 500000) print(t) # 14:30:15.</description>
    </item>
    <item>
      <title>正则表达式从入门到精通</title>
      <link>/posts/2026/05/regex/</link>
      <pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/regex/</guid>
      <description>什么是正则表达式 正则表达式（Regular Expression，简称 regex）是一种用于匹配字符串中字符组合的模式。它提供了一种强大、灵活且高效的方式来处理文本——搜索、匹配、替换和提取数据。&#xA;Python 的 re 模块提供了完整的正则表达式支持。在本章中，我们将从基础语法开始，逐步深入到实战应用。&#xA;第一个正则表达式 import re # 检查字符串中是否包含 &amp;#34;python&amp;#34; text = &amp;#34;我喜欢 Python 编程语言&amp;#34; pattern = r&amp;#34;Python&amp;#34; result = re.search(pattern, text) if result: print(f&amp;#34;找到了: {result.group()}&amp;#34;) # 输出: 找到了: Python 这里的 r&amp;quot;Python&amp;quot; 中的 r 表示原始字符串（raw string），它会告诉 Python 不要处理字符串中的反斜杠转义，这对于正则表达式至关重要。&#xA;re 模块的核心函数 re.match() — 从开头匹配 re.match() 从字符串的起始位置开始匹配，如果开头不匹配则返回 None：&#xA;import re text = &amp;#34;Python 是一门优秀的编程语言&amp;#34; # 从开头匹配 match = re.match(r&amp;#34;Python&amp;#34;, text) if match: print(match.group()) # Python # 不从开头匹配则失败 match = re.</description>
    </item>
    <item>
      <title>装饰器深入与实践</title>
      <link>/posts/2026/05/decorators/</link>
      <pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/decorators/</guid>
      <description>认识装饰器 装饰器（Decorator）是 Python 中一种强大的元编程工具。简单来说，装饰器就是一个函数，它接受另一个函数作为参数，并返回一个新的函数。装饰器允许我们在不修改原函数源代码的情况下，给函数添加额外的功能。&#xA;函数是一等公民 要理解装饰器，先要理解 Python 中&amp;quot;函数是一等公民&amp;quot;这个概念：&#xA;# 函数可以赋值给变量 def greet(name): return f&amp;#34;你好, {name}!&amp;#34; say_hello = greet print(say_hello(&amp;#34;小明&amp;#34;)) # 输出: 你好, 小明! # 函数可以作为参数传递 def call_twice(func, arg): return func(arg), func(arg) result1, result2 = call_twice(greet, &amp;#34;小红&amp;#34;) print(result1) # 输出: 你好, 小红! # 函数可以嵌套定义 def outer(): def inner(): return &amp;#34;我是内部函数&amp;#34; return inner inner_func = outer() print(inner_func()) # 输出: 我是内部函数 最简单的装饰器 基于上述特性，我们可以写出最简单的装饰器：&#xA;def my_decorator(func): def wrapper(): print(&amp;#34;函数调用前执行&amp;#34;) func() print(&amp;#34;函数调用后执行&amp;#34;) return wrapper def say_hello(): print(&amp;#34;你好!</description>
    </item>
    <item>
      <title>高级特性（JSON/全文搜索/扩展）</title>
      <link>/posts/2025/03/advanced-features/</link>
      <pubDate>Sat, 01 Mar 2025 10:00:00 +0800</pubDate>
      <guid>/posts/2025/03/advanced-features/</guid>
      <description>PostgreSQL 远不止是一个关系型数据库。它的高级特性让它在很多场景下可以替代专门的 MongoDB（JSON）、Elasticsearch（全文搜索）、甚至 Redis（键值存储）。&#xA;JSON 与 JSONB PostgreSQL 从 9.2 开始支持 JSON，9.4 引入了性能优异的 JSONB。&#xA;JSONB 的核心优势 JSONB 是二进制格式，去掉了空格和键的顺序 支持索引（GIN 索引），查询速度显著快于 JSON 支持高效的操作符（-&amp;gt;、 -&amp;gt;&amp;gt;、 @&amp;gt;、 ?、 ?|、 ?&amp;amp;） -- 创建 JSONB 列 CREATE TABLE products_json ( id SERIAL PRIMARY KEY, name VARCHAR(100), attributes JSONB -- 可变属性的最佳容器 ); INSERT INTO products_json (name, attributes) VALUES (&amp;#39;笔记本电脑&amp;#39;, &amp;#39;{&amp;#34;brand&amp;#34;: &amp;#34;联想&amp;#34;, &amp;#34;ram&amp;#34;: &amp;#34;16GB&amp;#34;, &amp;#34;storage&amp;#34;: &amp;#34;512GB SSD&amp;#34;, &amp;#34;color&amp;#34;: &amp;#34;银灰&amp;#34;, &amp;#34;weight&amp;#34;: 1.4}&amp;#39;), (&amp;#39;手机&amp;#39;, &amp;#39;{&amp;#34;brand&amp;#34;: &amp;#34;华为&amp;#34;, &amp;#34;ram&amp;#34;: &amp;#34;8GB&amp;#34;, &amp;#34;storage&amp;#34;: &amp;#34;256GB&amp;#34;, &amp;#34;color&amp;#34;: &amp;#34;黑色&amp;#34;, &amp;#34;screen&amp;#34;: &amp;#34;6.</description>
    </item>
    <item>
      <title>用户与权限管理</title>
      <link>/posts/2025/02/user-and-permission/</link>
      <pubDate>Thu, 27 Feb 2025 10:00:00 +0800</pubDate>
      <guid>/posts/2025/02/user-and-permission/</guid>
      <description>数据库安全的第一道防线是完善的用户和权限管理体系。PostgreSQL 提供了精细的权限控制模型，从数据库级别到列级别都能控制。&#xA;用户/角色管理 PostgreSQL 中用户和角色概念相通——区别在于用户默认有 LOGIN 权限，角色没有。&#xA;-- 创建用户 CREATE USER alice WITH PASSWORD &amp;#39;alice123&amp;#39;; -- 等价于 CREATE ROLE alice WITH LOGIN PASSWORD &amp;#39;alice123&amp;#39;; -- 创建角色（不用于登录，用于权限分组） CREATE ROLE sales_team; CREATE ROLE dev_team; CREATE USER bob WITH PASSWORD &amp;#39;bob456&amp;#39;; CREATE USER charlie WITH PASSWORD &amp;#39;charlie789&amp;#39;; 修改用户 -- 修改密码 ALTER USER alice WITH PASSWORD &amp;#39;newpassword&amp;#39;; -- 修改属性 ALTER USER alice WITH SUPERUSER; -- 设为超级用户 ALTER USER alice WITH NOSUPERUSER; -- 取消超级用户 ALTER USER alice WITH CREATEDB; -- 允许创建数据库 ALTER USER alice WITH CREATEROLE; -- 允许创建角色 -- 禁用用户 ALTER USER alice WITH NOLOGIN; -- 重命名 ALTER USER alice RENAME TO alice_new; 删除用户 -- 删除前确认没有依赖的数据库对象 REASSIGN OWNED BY alice TO postgres; -- 转移对象所有权 DROP OWNED BY alice; -- 删除用户所有的对象 DROP USER alice; 角色继承 角色的核心价值在于层级管理——把权限授予角色，然后把角色授予用户：</description>
    </item>
    <item>
      <title>备份与恢复</title>
      <link>/posts/2025/02/backup-and-restore/</link>
      <pubDate>Tue, 25 Feb 2025 10:00:00 +0800</pubDate>
      <guid>/posts/2025/02/backup-and-restore/</guid>
      <description>备份是数据库管理的生命线。PostgreSQL 提供了多种备份策略，从简单的 SQL 导出到基于 WAL 的持续归档（PITR），能满足从开发到企业级的各种需求。&#xA;逻辑备份 使用 pg_dump 导出 SQL 格式备份，是简单场景的首选。&#xA;备份单个数据库 # 导出纯 SQL 格式（最通用，可读可编辑） pg_dump -U postgres -d mydb &amp;gt; mydb_backup.sql # 自定义格式（压缩，支持并行恢复） pg_dump -U postgres -d mydb -Fc &amp;gt; mydb_backup.dump # 目录格式（并行备份，默认每个表一个文件） pg_dump -U postgres -d mydb -Fd -j 4 &amp;gt; mydb_backup_dir/ # 只备份 schema（不备份数据） pg_dump -U postgres -d mydb --schema-only &amp;gt; mydb_schema.sql # 只备份数据（不备份 schema） pg_dump -U postgres -d mydb --data-only &amp;gt; mydb_data.sql 恢复备份 # 方式 1：SQL 格式直接导入 psql -U postgres -d mydb &amp;lt; mydb_backup.</description>
    </item>
    <item>
      <title>触发器与事件</title>
      <link>/posts/2025/02/triggers-and-events/</link>
      <pubDate>Sun, 23 Feb 2025 10:00:00 +0800</pubDate>
      <guid>/posts/2025/02/triggers-and-events/</guid>
      <description>触发器让数据库在特定事件（INSERT、UPDATE、DELETE）发生时自动执行函数，是维护数据完整性和实现自动化逻辑的强大工具。&#xA;触发器基础 创建触发器的流程 -- 1. 先创建一个触发器函数（返回 TRIGGER 类型） CREATE OR REPLACE FUNCTION trigger_function() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN -- 逻辑代码 RETURN NEW; -- 或 RETURN OLD，或 RETURN NULL END; $$; -- 2. 将函数绑定到表上 CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE | TRUNCATE} ON table_name [FOR EACH {ROW | STATEMENT}] EXECUTE FUNCTION trigger_function(); 新旧数据的含义 场景 OLD NEW INSERT NULL 新插入的行 UPDATE 更新前的行 更新后的行 DELETE 被删除的行 NULL 实战：自动更新时间戳 这是最常用的触发器——自动维护 updated_at 列：</description>
    </item>
    <item>
      <title>存储过程与函数</title>
      <link>/posts/2025/02/stored-procedures-and-functions/</link>
      <pubDate>Fri, 21 Feb 2025 10:00:00 +0800</pubDate>
      <guid>/posts/2025/02/stored-procedures-and-functions/</guid>
      <description>存储过程和函数允许你在数据库内部执行业务逻辑——数据不离开数据库，减少网络往返，对特定场景有显著性能优势。&#xA;函数 vs 存储过程 PostgreSQL 11 之前只有函数（必须返回值），11 之后引入了真正的存储过程（可以不返回值）。&#xA;特性 函数（FUNCTION） 存储过程（PROCEDURE） 返回值 必须返回（可 VOID） 可不返回 事务控制 不支持 BEGIN/COMMIT 内部 支持 SELECT 调用 ✅ SELECT func() ❌ CALL 调用 ❌ ✅ CALL proc() 参数模式 IN / OUT / INOUT IN / INOUT 创建函数 CREATE OR REPLACE FUNCTION func_name(param1 TYPE, param2 TYPE DEFAULT default_value) RETURNS return_type LANGUAGE plpgsql AS $$ BEGIN -- 函数体 RETURN result; END; $$; 标量函数 -- 最简单的函数：计算折扣价格 CREATE OR REPLACE FUNCTION calc_discount_price( p_price NUMERIC, p_discount NUMERIC DEFAULT 0.</description>
    </item>
    <item>
      <title>模型评估与调优</title>
      <link>/posts/2025/01/model-evaluation/</link>
      <pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/01/model-evaluation/</guid>
      <description>训练一个模型只是第一步。如何可靠地评估模型的表现，如何找到最好的参数组合，如何比较不同模型哪个更优，这些才是机器学习实践中的核心挑战。本文将全面介绍模型评估和调优的方法论。&#xA;交叉验证：更可靠的评估 单次划分训练集和测试集存在一个问题：结果可能因为随机划分而产生很大波动。交叉验证通过多次划分取平均值，提供更稳定的评估结果。&#xA;K-Fold 交叉验证 将数据平均分为 K 份，轮流用 K-1 份训练、1 份验证。&#xA;import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_diabetes from sklearn.model_selection import (cross_val_score, cross_validate, KFold, StratifiedKFold, LeaveOneOut, TimeSeriesSplit, learning_curve, validation_curve, GridSearchCV, RandomizedSearchCV) from sklearn.linear_model import Ridge, Lasso from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor from sklearn.metrics import mean_squared_error, r2_score, make_scorer import warnings warnings.filterwarnings(&amp;#39;ignore&amp;#39;) # 加载数据 diabetes = load_diabetes() X, y = diabetes.data, diabetes.target # 5 折交叉验证 kfold = KFold(n_splits=5, shuffle=True, random_state=42) scores = cross_val_score(Ridge(alpha=1.</description>
    </item>
    <item>
      <title>特征工程</title>
      <link>/posts/2025/01/feature-engineering/</link>
      <pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/01/feature-engineering/</guid>
      <description>在机器学习领域，有一个广为流传的说法：&amp;ldquo;数据和特征决定了机器学习的上限，而模型和算法只是逼近这个上限。&amp;rdquo; 特征工程就是将原始数据转化为最能代表问题的特征的过程。它往往是机器学习项目中最耗时但也是最有价值的部分。&#xA;为什么特征工程如此重要？ 优秀特征带来的提升往往比换一个复杂模型更为显著。特征工程能：&#xA;提升模型精度：好的特征让模式更容易被模型捕捉 降低数据需求：好的特征可以用更简单的模型达到同等的效果 提升可解释性：有意义的特征让模型决策更容易理解 减少过拟合：去除噪音特征，让模型聚焦于真正的信号 特征编码 机器学习模型通常只能处理数值数据。原始数据中的类别、文本等信息需要转换为数值形式。&#xA;One-Hot 编码 最常用的类别编码方式。将 K 个类别的特征转换为 K 个二进制特征。&#xA;import pandas as pd import numpy as np from sklearn.preprocessing import OneHotEncoder, LabelEncoder, OrdinalEncoder from sklearn.feature_extraction import FeatureHasher # 示例数据 data = pd.DataFrame({ &amp;#39;color&amp;#39;: [&amp;#39;red&amp;#39;, &amp;#39;blue&amp;#39;, &amp;#39;green&amp;#39;, &amp;#39;blue&amp;#39;, &amp;#39;red&amp;#39;], &amp;#39;size&amp;#39;: [&amp;#39;S&amp;#39;, &amp;#39;M&amp;#39;, &amp;#39;L&amp;#39;, &amp;#39;XL&amp;#39;, &amp;#39;M&amp;#39;], &amp;#39;price&amp;#39;: [100, 150, 200, 250, 180] }) # One-Hot 编码 onehot = OneHotEncoder(sparse_output=False, drop=&amp;#39;first&amp;#39;) # drop=&amp;#39;first&amp;#39; 避免多重共线性 encoded = onehot.</description>
    </item>
    <item>
      <title>聚类分析</title>
      <link>/posts/2025/01/clustering-analysis/</link>
      <pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/01/clustering-analysis/</guid>
      <description>前两篇文章我们学习了监督学习中的回归和分类算法。但真实世界中，大量数据是没有标签的。当数据没有标准答案时，我们如何从中发现规律？这就是无监督学习的用武之地，而聚类分析是无监督学习中最核心的任务之一。&#xA;什么是聚类分析？ 聚类分析的目标是将数据划分为若干个组（簇），使得同一簇内的样本尽可能相似，不同簇的样本尽可能不同。聚类与分类的根本区别在于：分类有标签可学，聚类完全靠数据自身的结构。&#xA;聚类的主要应用 客户分群：将用户按消费行为分组，制定差异化营销策略 图像压缩：将相似颜色聚为一类，减少颜色数量 异常检测：远离所有簇的样本可能是异常值 文档分类：自动将新闻文章按主题分组 生物信息学：基因表达数据分析，发现功能相似的基因 K-Means 聚类 K-Means 是最经典、最常用的聚类算法，简单高效。&#xA;算法原理 K-Means 的迭代过程如下：&#xA;随机选择 K 个点作为初始簇中心 计算每个样本到 K 个中心的距离，分配到最近的中心 对每个簇，重新计算中心（簇内所有点的均值） 重复 2-3 步直到中心不再变化或达到最大迭代次数 Python 实现 import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.cluster import KMeans # 生成模拟数据：3 个簇 X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=1.0, random_state=42) # 可视化数据 plt.figure(figsize=(10, 6)) plt.scatter(X[:, 0], X[:, 1], s=50, alpha=0.7) plt.title(&amp;#39;原始数据（无标签）&amp;#39;) plt.xlabel(&amp;#39;特征 1&amp;#39;) plt.ylabel(&amp;#39;特征 2&amp;#39;) plt.show() # 应用 K-Means kmeans = KMeans(n_clusters=3, random_state=42, n_init=10) kmeans.</description>
    </item>
    <item>
      <title>分类算法</title>
      <link>/posts/2025/01/classification-algorithms/</link>
      <pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/01/classification-algorithms/</guid>
      <description>分类是机器学习中最常见的问题类型之一。不管是识别垃圾邮件、诊断疾病、检测欺诈交易还是人脸识别，背后都是分类算法在起作用。本文将深入介绍几种最核心的分类算法，从原理到实战带你全面掌握。&#xA;分类问题概述 分类问题的目标是根据输入特征预测一个离散的类别标签。根据类别数量分为：&#xA;二分类：只有两个类别，如垃圾邮件/非垃圾邮件 多分类：有三个或以上类别，如手写数字识别（0-9） 多标签分类：每个样本可以属于多个类别，如图片标签 本文我们将重点介绍二分类和多分类场景。&#xA;逻辑回归 逻辑回归虽然名字里有&amp;quot;回归&amp;quot;，但它实际上是一种分类算法。它通过 Sigmoid 函数将线性回归的输出映射到 0 到 1 之间的概率值。&#xA;Sigmoid 函数 Sigmoid 函数的数学形式：&#xA;$$\sigma(z) = \frac{1}{1 + e^{-z}}$$ 它把任意实数压缩到 (0, 1) 区间，非常适合表示概率。&#xA;import numpy as np import matplotlib.pyplot as plt def sigmoid(z): return 1 / (1 + np.exp(-z)) z = np.linspace(-10, 10, 100) s = sigmoid(z) plt.figure(figsize=(10, 6)) plt.plot(z, s, &amp;#39;b-&amp;#39;, linewidth=2) plt.axhline(y=0.5, color=&amp;#39;gray&amp;#39;, linestyle=&amp;#39;--&amp;#39;, alpha=0.5) plt.axvline(x=0, color=&amp;#39;gray&amp;#39;, linestyle=&amp;#39;--&amp;#39;, alpha=0.5) plt.xlabel(&amp;#39;z&amp;#39;) plt.ylabel(&amp;#39;σ(z)&amp;#39;) plt.title(&amp;#39;Sigmoid 函数&amp;#39;) plt.</description>
    </item>
    <item>
      <title>回归分析</title>
      <link>/posts/2025/01/regression-analysis/</link>
      <pubDate>Tue, 14 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/01/regression-analysis/</guid>
      <description>回归分析是机器学习中最基础也最强大的工具之一。它用来预测连续数值型目标变量，比如房价、温度、销售额。虽然概念简单，但回归分析包含了机器学习中许多核心思想，是理解更复杂模型的重要基石。&#xA;什么是回归分析？ 回归分析研究的是自变量（特征）与因变量（目标）之间的定量关系。它的核心目标是找到一个函数，能够根据输入特征预测输出值。&#xA;简单线性回归 只有一个自变量的线性回归称为简单线性回归。它的数学形式是：&#xA;$$y = \beta_0 + \beta_1 x + \varepsilon$$ 其中 $\beta_0$ 是截距，$\beta_1$ 是斜率（系数），$\varepsilon$ 是误差项。&#xA;最小二乘法是最常用的参数估计方法。它的目标是最小化所有数据点的预测值与真实值之间的平方差之和：&#xA;$$\min \sum_{i=1}^{n} (y_i - \hat{y}_i)^2$$ import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression # 生成模拟数据 np.random.seed(42) X = np.random.rand(50, 1) * 10 # 0-10之间的随机数 y = 2.5 * X.squeeze() + 1 + np.random.randn(50) * 1.5 # y = 2.5x + 1 + 噪声 # 训练模型 model = LinearRegression() model.</description>
    </item>
    <item>
      <title>机器学习概览</title>
      <link>/posts/2025/01/ml-overview/</link>
      <pubDate>Mon, 13 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/01/ml-overview/</guid>
      <description>经过前面十二篇文章的学习，我们已经掌握了数据分析的核心技能：从数据采集、清洗、探索性分析到可视化。但数据分析的终极目标不仅是描述过去，更是预测未来。这就是机器学习登场的时刻。&#xA;什么是机器学习？ 机器学习是一门让计算机从数据中自动学习规律和模式的学科，无需人为显式编程。传统编程中，我们输入规则和数据，得到答案。而在机器学习中，我们输入数据和答案，让计算机自己总结出规则。&#xA;传统编程: 规则 + 数据 → 答案 机器学习: 数据 + 答案 → 规则 这个能力让机器学习能够处理传统编程难以解决的问题：识别图片中的猫、理解语音命令、预测股票走势、推荐你可能喜欢的电影。&#xA;机器学习与数据分析的关系 很多人会问：机器学习和数据分析有什么区别？&#xA;简单来说，数据分析重在描述和诊断，而机器学习重在预测和决策。&#xA;描述性分析（前几篇文章的重点）：回答&amp;quot;发生了什么？&amp;quot;——如销售额同比下降了15%。 诊断性分析：回答&amp;quot;为什么发生？&amp;quot;——如是因为用户流失还是客单价下降。 预测性分析（机器学习的强项）：回答&amp;quot;未来会发生什么？&amp;quot;——如下个月预计销售额。 规范性分析：回答&amp;quot;我们应该怎么做？&amp;quot;——如应该给哪些用户发放优惠券。 机器学习和数据分析并非割裂的。实际上，机器学习是数据分析的自然延伸。你掌握的数据清洗、可视化、统计检验等技能，在机器学习项目中同样至关重要。&#xA;三大学习范式 机器学习按照学习方式可以分为三大类。&#xA;监督学习 监督学习使用带有标签的数据进行训练。就像老师带着标准答案教学生一样，模型学习输入到输出之间的映射关系。&#xA;回归任务：预测连续值（如房价、温度） 分类任务：预测类别标签（如垃圾邮件检测、疾病诊断） 常见的监督学习算法包括线性回归、决策树、随机森林、支持向量机、神经网络等。&#xA;无监督学习 无监督学习处理没有标签的数据，模型需要自己发现数据中的结构和模式。&#xA;聚类任务：将相似的数据点分组（如客户分群） 降维任务：压缩数据维度同时保留关键信息（如数据可视化） 常见的无监督学习算法包括 K-Means、DBSCAN、主成分分析（PCA）等。&#xA;强化学习 强化学习通过智能体与环境交互，根据奖励信号学习最优策略。它在游戏、机器人控制、自动驾驶等领域表现出色。&#xA;强化学习与传统监督学习的区别在于：没有现成的&amp;quot;正确答案&amp;quot;，智能体需要通过试错来学习。AlphaGo 击败李世石、OpenAI 的 Dota 2 机器人，都是强化学习的经典案例。&#xA;算法分类一览 下面这张表格帮你快速建立机器学习算法的全局认知：&#xA;类别 算法 典型应用 线性回归 普通最小二乘、Ridge、Lasso 价格预测、趋势分析 基于树的模型 决策树、随机森林、梯度提升树 分类、回归、特征重要性分析 支持向量机 SVC、SVR 文本分类、图像识别 基于距离的模型 KNN（K近邻） 推荐系统、模式识别 神经网络 MLP、CNN、RNN、Transformer 图像、语音、自然语言处理 聚类算法 K-Means、DBSCAN、层次聚类 客户分群、异常检测 降维算法 PCA、t-SNE、UMAP 数据可视化、特征压缩 集成方法 Bagging、Boosting、Stacking 提升预测精度 机器学习工作流 一个完整的机器学习项目通常包含以下步骤。</description>
    </item>
  </channel>
</rss>
