ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python微博情感分析:从数据采集到机器学习建模完整实践

Python微博情感分析:从数据采集到机器学习建模完整实践 简介基于机器学习的微博情感分析与研究毕业设计项目源码已获高分通过适合计算机相关专业学生作为毕业设计、期末大作业或课程设计参考。项目围绕微博文本的情感分类任务展开可帮助学习者熟悉情感分析的一般流程包括数据预处理、特征工程、模型训练与效果评估等环节理解机器学习在真实社交媒体数据上的落地方式。zip压缩包大小约42.44MB下载解压后即可在本地环境配置运行整体部署门槛较低无需复杂环境调整尤其适合刚接触Python与机器学习的小白用户上手实操。已有505人浏览学习整体参考热度较高。获得这份源码后可对照运行并深入研读建模思路也可结合自身数据集替换或微调模型用于完成毕设功能演示、代码讲解与答辩准备对想从事文本挖掘方向的学习者亦是一份不错的起步范例无论是展示模型效果还是作为后续改进的基线都具有实际价值。1. 这个毕业设计到底在做什么微博情感分析的本质与项目边界如果你正在愁毕业论文选什么题又不想碰硬件、不想啃晦涩算法推导Python 做微博情感分析几乎是性价比最高的一条路。这个课题的本质是用爬虫或开放接口拿到微博评论/博文文本经过清洗、分词、向量化后交给机器学习分类器把每条文本判成正面、负面或中性再用统计图表呈现舆论倾向。整套链路覆盖了数据采集、文本预处理、特征工程、模型训练、评估和可视化正好对应毕业论文要求的“有完整工作流”而不是只跑一个模型就交差。适合两类人一类是刚入门机器学习、需要快速跑通全流程的本科生另一类是时间紧张、想用成熟方案做对比实验再写进论文的考研/保研党。这个项目能解决的问题很具体把非结构化的中文短文本变成可量化的情感极性分布最终输出一张结论图和一份评估报告。读懂本文你就能从一个空目录开始把数据、代码、图表和论文结论一步步补齐。2. 先把方案选型定死为什么用 Python sklearn而不是一上来就上深度学习2.1 情感分析任务的三种落地路线对比微博情感分析技术路线上大致有三条选型会直接影响你后面写论文的篇幅和工作量。第一条是情感词典法事先准备正负情感词表统计文本中命中词的分数之和。实现简单但微博文本里有大量网络新词和反讽表达固定词表几乎必翻车。第二条是传统机器学习用 TF-IDF 或词袋特征配合朴素贝叶斯、逻辑回归、SVM 分类器。特征是离散的、模型可解释性强训练快是毕业设计最稳妥的路线也是本文主线。第三条是深度学习用 Word2Vec 或 BERT 做文本表示再接 TextCNN 或 BiLSTM。效果好但训练时间和硬件要求高且论文里难以解释模型内部决策。对于一篇本科毕业设计你需要的不是“效果最好”而是“每一步都能讲清原理、出问题能定位”。因此我推荐以第二条路线为主体把深度学习作为对比实验放进最后一章而不是让它当主角。面试或答辩时老师更在意的是你知不知道为什么朴素贝叶斯适合短文本、TF-IDF 解决了什么问题、数据不平衡怎么处理。这些恰好都是传统机器学习路线能讲透的点。2.2 技术栈清单与项目文件划分这个项目的技术栈很朴素全部跑在 Python 3.8 上不需要 GPU。核心依赖包括 jieba 做分词、scikit-learn 做特征与模型、pandas 做数据处理、matplotlib 做可视化。如果你本机没装过 Python 环境先去官网下载安装包勾选“Add Python to PATH”再在命令行执行 pip install jieba scikit-learn pandas matplotlib 一次装齐。这里补充一个贴心细节sklearn 库安装失败通常发生在 Python 版本过老或缺少 Microsoft C Build Tools 的 Windows 机器上解决方案是升级 Python 到 3.9/3.10或使用 Anaconda 创建独立环境。项目目录建议按下面的结构组织顺序就是你的论文目录顺序weibo_sentiment/ ├── data/ # 原始数据与清洗后数据 │ ├── raw_comments.csv │ └── clean_comments.csv ├── code/ │ ├── 01_spider.py # 数据采集 │ ├── 02_preprocess.py # 清洗、分词、去停用词 │ ├── 03_feature.py # TF-IDF 特征 │ ├── 04_train.py # 模型训练与评估 │ └── 05_visualize.py # 词云与趋势图 ├── model/ # 保存的模型文件 └── output/ # 图表和评估报告2.3 你不需要高性能电脑但需要一个“能复现”的固定环境很多同学喜欢在 PyCharm 里直接把项目跑起来然后换台电脑就崩了。血泪经验是先创建一个虚拟环境再装依赖把版本号固定记录到 requirements.txt。原因在于 sklearn 1.0 和 0.24 在部分 API 上有差异比如 train_test_split 的参数没有变化但某些模型的默认参数变了直接导致你的实验结果别人复现不了答辩时老师换台电脑一跑就翻车。下面的命令可以在项目根目录初始化环境python -m venv venv # Windows 激活方式 venv\Scripts\activate # macOS / Linux 激活方式 source venv/bin/activate pip install numpy1.24.3 pandas2.0.3 jieba0.42.1 scikit-learn1.3.0 matplotlib3.7.2 pip freeze requirements.txt这里有个关键点numpy 和 scikit-learn 存在版本联动新版 sklearn 对旧版 numpy 会直接抛异常。如果你不想纠结版本匹配直接复制我上面的版本组合即可它们已在多个项目里验证可以协同工作。环境问题是最没技术含量但最耗时间的坑用一个虚拟环境一次锁死后面所有步骤都顺畅了。3. 数据是第一个坑微博评论采集与文本预处理流程3.1 常规采集方式登录 Cookie、翻页与限速没有数据后面全是空谈。微博开放接口对个人开发者并不友好常规做法是用 Python 模拟浏览器请求公开评论接口。在毕业设计场景下我建议采集的目标不要选热门头条微博而选一个你感兴趣的话题或某条可控范围内的博文评论这样数据量在 5000-10000 条即可满足实验需求。下面是基于 requests 的采集脚本框架import requests import pandas as pd import time # 从浏览器开发者工具中复制你的 Cookie登录后才有权限 COOKIE 你的登录Cookie HEADERS { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), Cookie: COOKIE, X-Requested-With: XMLHttpRequest } def fetch_comments(weibo_id, max_page20): 抓取指定微博的评论数据 comments [] for page in range(1, max_page 1): url https://weibo.com/ajax/statuses/commentlist params {id: weibo_id, page: page} try: resp requests.get(url, headersHEADERS, paramsparams, timeout5) data resp.json() if not data.get(data) or not data[data].get(list): break # 没有更多评论了 for item in data[data][list]: comments.append({ text: item.get(text_raw, ), # 原始文本 created_at: item.get(created_at, ), like_count: item.get(like_count, 0) }) except Exception as e: print(f第{page}页抓取失败: {e}) break # 失败就停避免触发风控 time.sleep(1) # 每页间隔1秒大幅降低被限流的概率 return pd.DataFrame(comments) if __name__ __main__: df fetch_comments(某条微博的数字ID) df.to_csv(data/raw_comments.csv, indexFalse, encodingutf-8-sig)这段逻辑里最关键的两个参数是 weibo_id 和 max_page。weibo_id 是微博详情页 URL 里那串数字比如某条博文链接最后部分是 5042870376278391这就是 id。max_page 决定最大翻页数微博网页端评论接口一般最多可以翻到 50 页左右但每页只有 10-20 条所以想集齐 1 万条数据得换多条微博或改用时间循环采集。代码里 time.sleep(1) 不是可有可无它控制请求频率是“活下来”的第一条军规。同时我在异常处理里直接 break 而不是 continue是因为连续失败往往意味着频率过高或 Cookie 失效继续请求只会让风控锁得更紧。做个避重就轻的提示爬虫只是项目的数据获取手段不属于论文核心章节。如果实在被限制也可以改用公开数据集与手动标注组合这能让你把时间省下来聚焦在建模上。3.2 清洗文本正则表达式处理 URL、用户与表情符号微博文本的“脏”超出你的想象。一条典型评论长这样“哈哈哈这也太搞笑了吧某某 https://t.cn/A6xYz [doge] ”。如果直接拿去分词标记、URL、表情代码全会被切成一堆无意义的词严重污染后续特征。清洗这一步要解决三件事去掉 URL、去掉 用户名、去掉表情符号和 HTML 标签。下面是一段可复用的清洗函数import re def clean_text(text): 清洗微博文本去URL、用户、表情代码、HTML实体、多余空白 if not isinstance(text, str): return # 去掉 http 或 https 开头的链接 text re.sub(rhttps?://\S, , text) # 去掉 用户名字母数字和下划线组成 text re.sub(r[\w\u4e00-\u9fa5][:]?, , text) # 去掉 [表情] 形式的微博表情代码 text re.sub(r\[[^\]]\], , text) # 去掉 HTML 实体比如 nbsp; amp; text re.sub(r\w;, , text) # 去掉多余空白和换行 text re.sub(r\s, , text).strip() return text正则表达式里需要注意的点微博表情是方括号包中文比如 [doge]所以用\[[^\]]\]匹配 用户名可能带中文字符所以字符集里要加入\u4e00-\u9fa5。但是这里有个边界问题[^\]]也会把正常文本里带方括号的词删掉比如“这家店[赞]”。实际项目中可以先统计带方括号的片段看哪些是表情再删而不是全删。这一步在论文里可以写成“基于正则表达式的规则清洗”显得很有条理。清洗完记得保存到新文件不要覆盖原始数据因为论文里需要展示清洗前后的对比样例。清洗后你会发现文本短了很多这正是微博短文本的特性信息密度低、噪音高模型能利用的信号非常有限。所以下一步的分词质量直接决定模型效果。3.3 jieba 分词、去停用词与自定义词典中文文本没有空格必须分词。jieba 是使用最广的中文分词库但默认词典对微博新词覆盖不够比如“绝绝子”“yyds”“破防”这类词会被切成“绝绝”“子”“yyd”“s”直接丢失语义。解决办法是加自定义词典import jieba import jieba.posseg as pseg # 加载自定义词典每行一个词词 词频 词性 USER_DICT_PATH data/custom_dict.txt jieba.load_userdict(USER_DICT_PATH) STOPWORDS set() with open(data/stopwords.txt, r, encodingutf-8) as f: for line in f: STOPWORDS.add(line.strip()) def tokenize(text): 分词并过滤停用词、单字、纯数字 words jieba.lcut(text) # 精确模式分词 tokens [] for w in words: w w.strip() if not w: continue if w in STOPWORDS: continue if len(w) 2: continue if w.isnumeric(): continue tokens.append(w) return .join(tokens)自定义词典的格式我用参数说明讲清楚每一行是“词语 词频 词性”例如“绝绝子 100 形容词”词频越高越容易被 jieba 优先切出但词频给太高也可能导致该词被强拆成单字我一般取值 50-200 之间。停用词表可以直接下载公开的哈工大停用词表一定要在表里补上“哈哈”“哈哈哈”“啊啊”这类语气词它们出现频率极高但毫无情感区分度。分词这一步的坑在于同一份文本每次运行分词结果完全一致吗答案是 jieba 的精确模式是确定性的不涉及随机性但如果你用了 jieba.enable_parallel() 并行模式结果可能因进程调度而不同写论文时别用并行免得复现不了。3.4 标注数据不做纯手工标注的兜底方案监督学习必须有标签。最理想的情况是淘宝找人标注 5000 条但学生党没预算。常见做法是把每条评论对应的点赞数作为弱标签的参考但这并不靠谱点赞高不代表情绪强烈。我推荐两个务实路线。第一利用公开情感标注数据集做预训练。比如中文情感分析常用数据集中包含购物评论和酒店评论领域不同但情感表达有共通处可以先在其上预训练模型再用少量微博数据微调。第二半自动标注先用情感词典给每条文本算一个粗糙得分积极词 1消极词 -1取分数绝对值较大的作为有标签样本再人工抽检修正。这种方法能让你从 2000 条手工标注中解放出来达到 5000-8000 条有效数据。关键提醒无论用什么方式标注论文里必须如实写清楚“标注标准”和“标注一致性”比如两个人各自标注 1000 条算 Kappa 系数。否则答辩时老师一问“你怎么保证标签是对的”就会陷入被动。标注这一步看起来无聊实际是你建模效果的天花板——标签本身的噪声大了用什么分类器都救不回来。4. 特征工程与建模用 TF-IDF 喂给朴素贝叶斯和逻辑回归4.1 中文文本向量化词袋、TF-IDF 与 Word2Vec 的取舍计算机不认识汉字必须转成数值向量。第一个选择是 CountVectorizer也就是词袋模型统计每个词在文本里出现的次数。它的问题是像“的”“了”“是”这类高频但无意义的词会获得很高权重虽然清洗时已经去掉一部分停用词但仍会残留大量干扰。第二个选择是 TF-IDF它在词频基础上乘一个逆文档频率自动降低那些在几乎所有文本中都出现的词的权重提高只在部分文本中出现的词的权重。第三个选择是 Word2Vec把词映射成稠密向量能捕捉“高兴”和“开心”的相似性但训练需要大量语料且向量拼接方式会丢失词序信息。对于毕业设计TF-IDF 是性价比最高的选择。原因很简单朴素贝叶斯和逻辑回归这类线性模型的输入要求是稀疏、可解释的特征TF-IDF 恰好满足而且每个特征维度的权重可以直接对应到某个词方便做错误分析。Word2Vec 可以在进阶对比实验里用但不要作为主模型的输入否则论文里很难解释某个词对结果的贡献。4.2 最小可用训练脚本sklearn Pipeline 串联全流程如果把特征工程和模型分开写代码一旦要调参就得改两处容易出错。我习惯用 Pipeline 把它们串起来这样调参时只需要给 Pipeline 的参数接口传值代码干净论文里也好画流程图。下面是最小可用训练脚本import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipeline from sklearn.metrics import classification_report, confusion_matrix # 读取清洗后的数据要求有两列clean_text 和 label df pd.read_csv(data/clean_comments.csv, encodingutf-8-sig) X df[clean_text].tolist() y df[label].tolist() # label: 1 正面, 0 中性, -1 负面 # 确保类别是均匀分布的打印原始分布 print(原始类别分布:, y.count(1), y.count(0), y.count(-1)) # 固定随机种子保证实验结果可复现 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42, stratifyy ) # Pipeline: TF-IDF 朴素贝叶斯 pipeline_nb Pipeline([ (tfidf, TfidfVectorizer( ngram_range(1, 2), # 考虑单个词和相邻双词 min_df2, # 至少在2条文本中出现过的词才保留 max_df0.8, # 在超过80%的文本中都出现的词视为停用词 sublinear_tfTrue # 使用1log(tf)平滑抑制长文本中高频词的影响 )), (clf, MultinomialNB(alpha0.3)) # 拉普拉斯平滑系数 ]) pipeline_nb.fit(X_train, y_train) y_pred pipeline_nb.predict(X_test) print(classification_report(y_test, y_pred, target_names[负面, 中性, 正面])) print(混淆矩阵:\n, confusion_matrix(y_test, y_pred))这段代码有四个参数值得展开。第一个是random_state42它保证切分结果可复现你第一次跑和第十次跑测试集完全一致没有它每次运行的评估分数都会有微小波动论文里写不了漂亮数据。第二个是stratifyy它让训练集和测试集里正负中性的比例与原始数据一致防止划分后某一类在测试集里只有几条。第三个是ngram_range(1, 2)微博文本短单个词很容易产生歧义比如“不”和“好”分开是中性合起来“不好”就是负面考虑双词能捕捉部分否定语义这是提升情感分析效果最有效的一招。第四个是alpha0.3朴素贝叶斯的平滑系数默认值是 1.0但对稀疏文本可适当调低减少对概率的过度平滑。没有固定最优值后面用网格搜索去扫。4.3 两个必调参数min_df 与 ngram_range 的现实作用很多新手拿到 TF-IDF 直接默认参数结果发现特征矩阵有几千维甚至上万维训练慢且过拟合。min_df 和 max_df 是剪枝的关键。min_df2 的含义是一个词如果只在一条评论里出现也就是频率为 1就直接丢掉。这样做有两个好处降低特征维度减少偶然出现的错别字或专有名词对模型的干扰。max_df0.8 的含义是一个词如果在超过 80% 的文本里都出现说明它基本是停用词级别没有区分度。这里要注意区别现实场景微博文本里“微博”“转发”“关注”这类词经常被清洗不干净它们在正负类别里均匀分布对分类毫无帮助max_df 可以直接把它们剔除。ngram_range 的调参更有玄学色彩。从 (1,1) 调到 (1,2)模型通常会涨几个百分点的 F1这是因为“不好”“不是”“太棒了没”这些二词组合携带了单一词汇缺失的语义。但如果调到 (1,3)特征维度暴增且严重稀疏效果往往会回落。原因是三词组合的出现频率极低且不稳定泛化能力差。我的经验是微博短文本用 (1,2) 起步如果你的语料平均长度超过 50 个字可以尝试 (1,3)但必须用交叉验证去验证。4.4 评估指标accuracy、F1、混淆矩阵怎么写进论文情感分析是典型的不平衡分类问题大多数微博评论其实是中性和吐槽纯正面或纯负面的比例较低。如果只看 accuracy你全部预测成中性也能有 60% 的准确率答辩时老师一句“你这个模型有没有学到东西”就会让你很难受。正确做法是在论文中报告每个类别的 precision、recall 和 macro-F1。Recall 特别重要对于负面评论漏判意味着舆情监控失效所以在论文里可以强调“在负面类别上达到 xx% 的召回率”。混淆矩阵应该画成热力图放进论文它能直观展示模型把哪些类别互相混淆。根据我的经验最常见的混淆发生在“中性”被误判为“正面”因为很多带嘲讽意味的评论如“这也太棒了吧白眼”在字面上是正面词汇模型没有能力理解讽刺。这里不要回避问题直接用一小段“错误分析”去解释这反而是论文里的加分项。5. 避坑与排查用你自己的数据复现不了的五个典型问题5.1 训练指标虚高但泛化极差检查是否有数据泄漏现象训练集 accuracy 高达 98%测试集却只有 65%。原因最常见的是清洗和标准化步骤在划分训练测试集之前就做了导致测试集信息间接进入训练过程。比如你用全部数据的词频统计结果去过滤低频词再把数据按用户 ID 去重这就把测试集的分布信息提前泄露给模型了。解决先划分 train/test再单独对 train 部分进行词汇表构建和参数拟合sklearn 的 Pipeline 已经强制保证了这一点但如果你是自己手写特征工程很容易踩这个坑。另一个人为泄漏来源于时间微博评论有强时间趋势如果把 2023 年的数据放进训练集、2024 年的放进测试集模型会因为话题漂移而表现极差这不是 bug而是数据分布变化要在论文里说明这一点。5.2 同一个脚本在不同机器上结果不一样随机种子与分词稳定性现象在实验室电脑跑出 F1 是 0.82回到宿舍电脑变成 0.79代码一字未改。原因sklearn 中某些模型如 LogisticRegression 的求解器存在随机初始化过程另外不同版本的 jieba 词典更新会让分词结果不一致。解决训练前设置全局随机种子并把依赖版本写入 requirements.txt。随机种子只设置一次不够正确做法是random.seed(42)、np.random.seed(42)都要调用还要给 TfidfVectorizer 固定dtypenp.float64。如果你用了 sklearn 的 GridSearchCV记得给它的cv参数传入StratifiedKFold(shuffleTrue, random_state42)否则交叉验证切分不一致网格搜索结果也会漂移。5.3 输出中文乱码或控制台编码报错读写路径统一 UTF-8现象csv 文件用 Excel 打开中文正常用 pandas 读进来全是“锟斤拷”。原因Windows 下 pandas 默认编码是 GBK而写入时用的是 utf-8。解决在读取和保存时显式指定编码。我在前面的代码里已经写了encodingutf-8-sig这个编码和普通的 utf-8 区别在于它会自动写入 BOM 头Excel 打开不乱码这是 Windows 环境下最省心的方法。另外 print 输出到 Windows 控制台时可以在脚本顶部添加import sys; sys.stdout.reconfigure(encodingutf-8)避免 UnicodeEncodeError。5.4 “666”“笑死”“绝了”这类词模型分不清负样本表达太匮乏现象负面评论召回率特别低模型把大量负面评论判成了正面或中性。原因中文负面表达高度依赖语境“绝了”可以是赞美也可以是吐槽“笑死”在微博语境里常表达无奈。单纯词汇特征无法捕捉。解决一是扩充自定义词典时把“笑死”“绷不住”“离大谱”“集美们”等网络用语加进去并赋予词性二是对负样本做简单的数据增强比如同一文本的同义替换用复述改写工具如基于规则把“太棒了”替换为“太离谱了”容易引入错误不建议手动大规模做三是在特征里加入标点信号比如感叹号数量和“哈哈”数量作为额外特征这两个信号在情感强度上很有区分度。经过这些处理后负面类别的 F1 通常能提升 5-8 个百分点。5.5 数据量不足导致模型过拟合增加数据还是换模型现象训练集只有 2000 条模型在训练集上表现优秀测试集上一塌糊涂。原因机器学习模型需要足够样本来泛化。解决思路按优先级排列。第一增加数据量哪怕用弱标注半自动生成 3000 条也比精标 500 条对模型更友好。第二降低模型复杂度把 ngram_range 收回到 (1,1)增大 min_df 到 5让模型更“保守”。第三换更简单的模型朴素贝叶斯在极小样本下的表现往往优于逻辑回归因为它的方差更小。第四使用交叉验证替代单次切分取 5 折平均分作为最终指标虽然写进论文的数据不那么“好看”但更真实答辩时能讲清楚这一点反而是加分项。6. 想拿到更好答辩效果把单模型变成对比实验与可视化呈现6.1 用一个简单的集成方法提升整体分数单独一个朴素贝叶斯往往不够。最常见的做法是同时训练朴素贝叶斯、逻辑回归和线性 SVM再用投票法集成。sklearn 里可以直接构建 VotingClassifier观察三个模型是否在不同错误模式上互补。以我的经验朴素贝叶斯对短文本敏感词响应快逻辑回归对否定句式更稳健SVM 在高维稀疏特征下边界更好三者的投票结果通常比最好的单模型高 2-3 个百分点。投票时建议用软投票votingsoft即加权平均各类别概率而不是硬投票。from sklearn.svm import LinearSVC from sklearn.ensemble import VotingClassifier from sklearn.calibration import CalibratedClassifierCV # SVM 概率输出需要校准否则 soft voting 不可用 svm CalibratedClassifierCV(LinearSVC(max_iter5000)) voting_clf VotingClassifier( estimators[ (nb, MultinomialNB(alpha0.3)), (lr, LogisticRegression(max_iter1000, C1.0)), (svm, svm) ], votingsoft ) voting_clf.fit(X_train, y_train)这段代码里的 CalibratedClassifierCV 值得单独说明LinearSVC 默认不输出概率直接拿去和 soft voting 会报错校准就是把 SVM 的决策值映射成概率分布代价是增加少量训练时间。如果数据量超过 1 万条这里的训练时间会明显变长可以考虑在 Pipeline 中把 svm 换成带probabilityTrue的 SVC(kernellinear)但速度更慢。答辩时能说出这个取舍说明你不是只会调包。6.2 用可视化让你的结论更可信论文需要的不是一张准确率表格而是一组让人印象深刻的图表。第一张图是情感分布占比饼图直接给出正面/中性/负面百分比。第二张图是时间序列情感趋势折线图这里是加分项按天统计情感均分看舆情如何随事件演化。第三张是词云图正面词和负面词分别生成两张直观展示模型学到的高权重词汇。最后画一张混淆矩阵热力图。把四张图放进论文第四章和第五章的“实验结果分析”比长篇大论的文字描述有效得多。matplotlib 画图时注意中文字体问题Windows 下要设置plt.rcParams[font.sans-serif] [SimHei]macOS 下用[PingFang SC]否则图表里全是方块。图表文件统一保存为 300dpi 的 PNG 格式插入论文不要直接截图否则打印模糊。6.3 我的习惯与最后提醒每一轮调参实验我都记录在表格里模型、特征维度、参数、F1、备注最后把最优配置回填进论文的实验章节。答辩前把训练好的模型和 data 文件夹放进压缩包老师现场要运行就直接复现这是最稳妥的底牌。希望你做这个项目时不要把目光只盯在准确率数字上——能把自己怎么清洗数据、怎么解决不平衡、怎么分析错误案例讲清楚的人才真正掌握了机器学习的应用流程。希望帮到你。本文还有配套的精品资源点击获取
返回列表