ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

人工智能实战:Python到机器学习资源包学习路线与避坑指南

人工智能实战:Python到机器学习资源包学习路线与避坑指南 简介这是一份面向人工智能初学者的实战型学习资料从Python基础语法起步一路延伸到机器学习核心理论与常见算法应用适合希望快速上手AI开发的学生、开发人员及转行者也适合作为高校相关课程的配套参考资料。压缩包共包含338个文件其中Python脚本251个辅以30个txt说明文本、13份PDF讲义、docx笔记及若干数据集和可视化图片覆盖代码、数据、文档多种形态可在本地直接运行与对照学习。包体约31.1MB内容组织清晰便于按模块查阅。目前已有1314人学习实用性获得认可。通过这份资料读者可获得从环境搭建、数据预处理、模型训练到结果评估的完整项目示例尤其是银行营销、员工离职等数据集对应的分类与回归实战案例能帮助理解机器学习流程并积累调参与排错经验。1. 人工智能实战这份 Python 到机器学习的资源包到底值不值得拆我见过太多人下载了“人工智能实战从 Python 入门到机器学习”这类资源包结果卡在第一步打开课程目录发现前面十几节课都是 Python 基础觉得自己都会直接跳到机器学习算法然后被损失函数、梯度下降砸得怀疑人生。这份资源包的定位其实很明确——它面向的是想认真把人工智能动手落地的人路径是 Python 语法 → 数据处理 → 机器学习算法 → 项目实战不是那种只讲概念不带代码的科普视频。适合三类人刚接触编程、想转行做数据分析或算法岗的从业者课程作业需要完整项目支撑的在校生以及买过很多课程但始终没跑通过一个完整模型的“收藏党”。一句话它是用来照着敲代码的不是用来收藏的。2. 从 Python 语法到机器学习先理清资源包的学习路线与三大核心模块2.1 资源包内容结构先过语法再碰算法顺序比努力重要这份资源包最常见的内容组织方式是“视频教程 源码工程 数据集 笔记文档”四件套学习顺序直接决定你能不能坚持到最后。我判断一个资源包值不值得拆先看目录里有没有把“Python 语法”和“机器学习算法”分成独立阶段中间有没有“数据处理”做缓冲。如果一份资源包第 10 讲就开始讲神经网络那对新手基本是劝退流。我建议的拆包顺序是四步走。第一步用 3 到 5 天快速过 Python 语法只看变量、条件、循环、函数、类和列表字典这些基础第二步集中啃 NumPy、Pandas、Matplotlib 这三个库这是机器学习所有代码的地基第三步进入机器学习算法部分重点理解每个算法的适用场景而不是死记公式第四步把资源包自带的项目源码从头敲一遍再换一份数据集做迁移验证。这里有个关键点不要按目录顺序从第 1 课看到最后 1 课按“语法 → 数据 → 算法 → 实战”的节奏跳着学效率高得多。资源包里如果附带学习路线图或笔记文档先读文档再看视频。文档通常是作者按自己的经验压缩过的精华视频里的废话和演示时间反而多。我拆过十几份同类型资源包凡是能坚持到项目实战这一步的人几乎都是先读笔记、再对着源码敲、最后才补看视频里不懂的片段。2.2 Python 基础模块变量、函数、面向对象的快速学习方法很多初学者会问我自己已经会写 Python还要不要过这一阶段我的判断标准很简单——看你能不能不查资料写出下面这段代码。如果能直接跳到数据处理如果卡壳老老实实花两个晚上把基础过完。# 定义一个简单的类用于管理房价样本数据 class HouseSample: def __init__(self, area, price): self.area area # 房屋面积 self.price price # 房屋总价 def unit_price(self): # 计算单价返回每平米价格 return self.price / self.area samples [] for area, price in [(89, 320), (120, 480), (75, 260)]: samples.append(HouseSample(area, price)) # 按单价从高到低排序 sorted_samples sorted(samples, keylambda x: x.unit_price(), reverseTrue) for sample in sorted_samples: print(f面积{sample.area}平米单价{sample.unit_price():.0f}元/平米)这里的关键不是记住类的语法而是理解三点第一__init__负责把数据绑到对象上机器学习里每个样本就是一个对象第二lambda匿名函数在排序、筛选、map操作里高频出现尤其是后面处理 Pandas 数据框时会反复用第三列表推导和 for 循环是等价的但前者更简洁在特征工程里可以大幅简化代码量。如果你能看懂这段代码的逻辑并且能独立写出来Python 基础这关就算过了不需要把教程里每个知识点都刷完。资源包里这一阶段的源码通常是一些工具函数集合比如读取 CSV、划分训练集和测试集、计算均值方差之类。建议把每个函数的输入、输出、边界条件都标在注释里这比抄十遍代码有用得多。2.3 数据处理三件套NumPy、Pandas、Matplotlib 的角色分工到了这一阶段资源包的代码风格会发生一个明显变化不再用纯 Python 写循环而是用 NumPy 做矩阵运算、Pandas 做表格处理、Matplotlib 画图。三者的分工可以用一句话概括NumPy 提供多维数组和数学函数Pandas 在数组之上加了标签和数据框操作Matplotlib 负责把结果可视化。不理解这个分工就容易出现用 for 循环逐行算均值这种低效写法。import numpy as np import pandas as pd # 生成一份模拟房价数据面积、卧室数、房龄 data pd.DataFrame({ area: [89, 120, 75, 98, 110], bedrooms: [2, 3, 2, 3, 3], age: [5, 10, 8, 3, 12] }) # 用 Pandas 计算每列均值 print(平均值) print(data.mean()) # 用 NumPy 计算面积与房龄之间的相关系数 corr np.corrcoef(data[area], data[age]) print(f面积与房龄相关系数{corr[0, 1]:.3f}) # 添加一列单价假定为 3.5 万/平米可后续作为回归目标 data[price] data[area] * 3.5这段代码展示了三件事data.mean()是一句搞定按列聚合比纯 Python 循环快且不容易错np.corrcoef直接给出相关系数矩阵做特征选择时要经常看特征和目标之间的相关性添加新列用data[price] ...Pandas 会自动对齐索引这是特征工程加特征的最常用方式。资源包这一章的练习通常就围绕这三个动作展开——读数据、算统计量、画散点图。要注意的是资源包里如果用了pd.read_csv读取数据后直接print(data.head())这只是第一步。真正要在实战前练熟的是isnull()查缺失、dropna()删缺失、fillna()补缺失这三件套因为真实数据集里几乎没有干净数据缺失值处理会在项目阶段频繁出现。3. 机器学习算法落地线性回归到决策树的参数与评估细节3.1 监督学习三大主力线性回归、逻辑回归、决策树的选型逻辑资源包里的机器学习算法部分核心内容基本绕不开线性回归、逻辑回归、决策树这三个模型。不要被“从 Python 入门到机器学习”里的“入门”两个字误导——这三个模型本身就是工业界用量最大的算法而且它们的参数调整逻辑可以平移到后续更复杂的模型上。选型逻辑其实很直白预测连续数值用线性回归比如房价、销量分类问题用逻辑回归它本质是把线性回归的输出套了一个 sigmoid 函数压到 0 和 1 之间决策树则两者都可以但它真正的优势是处理特征和目标之间有非线性关系的场景。我见过不少初学者拿到分类任务就直接上逻辑回归不先做相关性分析和特征分布分析最后准确率上不去还找不到原因。from sklearn.linear_model import LinearRegression, LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split # 假设 X 是特征矩阵y 是目标变量 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) # 线性回归目标是连续数值 reg LinearRegression() reg.fit(X_train, y_train) print(f线性回归 R² 分数{reg.score(X_test, y_test):.3f}) # 逻辑回归目标是二分类标签 clf LogisticRegression(max_iter1000) clf.fit(X_train, y_train) print(f逻辑回归准确率{clf.score(X_test, y_test):.3f}) # 决策树限制深度防止过拟合 tree DecisionTreeClassifier(max_depth5, random_state42) tree.fit(X_train, y_train) print(f决策树准确率{tree.score(X_test, y_test):.3f})这里最容易被忽略的是random_state42这个参数。很多初学者会发现代码每次运行结果不一样就是因为没有固定随机种子。固定随机种子能保证你在调参前后比较结果时模型在同样的数据划分上训练和测试否则你根本无法判断是模型变好了还是数据划分变了。test_size0.2表示用 20% 的数据做测试如果你的数据集比较小可以用 0.3 甚至更大比例但要注意数据量不够时模型容易欠拟合。max_depth是决策树最重要的参数没有之一。不限制深度决策树会把训练集里每个样本都分对但测试集表现惨不忍睹。资源包里如果提供的是未调参的决策树代码建议你第一件事就是加上max_depth5或max_depth7再看测试集分数。3.2 模型评估别被准确率骗了重点看混淆矩阵和交叉验证资源包的分类项目代码里最常见的评估输出就是accuracy_score。如果数据集是平衡的准确率还有参考价值但如果正样本只占 5%模型全预测负类也能拿到 95% 的准确率这时候准确率就是骗人的。血泪经验是分类模型至少要打印混淆矩阵看不懂混淆矩阵你连自己的模型错在哪儿都不知道。from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score # 假设 y_test 是真实标签y_pred 是模型预测结果 y_pred clf.predict(X_test) # 混淆矩阵 cm confusion_matrix(y_test, y_pred) print(混淆矩阵) print(cm) # 精确率与召回率 print(f精确率{precision_score(y_test, y_pred):.3f}) print(f召回率{recall_score(y_test, y_pred):.3f}) print(fF1 分数{f1_score(y_test, y_pred):.3f})混淆矩阵的四格分别对应真正例、假正例、真负例、假负例。精确率回答的是“预测为正类的样本里有多少是真的正类”召回率回答的是“真实正类样本里有多少被找出来了”。两者往往此消彼长F1 分数是它们的调和平均适合作为综合指标。资源包里的项目如果涉及医疗诊断、故障检测这类正类样本稀少的场景请务必把 F1 分数作为主要评估指标不要只盯着准确率。交叉验证部分常见做法是用cross_val_score做 K 折交叉验证。它比单次划分训练测试集更稳因为它把数据切成 K 份轮流做验证集最终取 K 次分数的平均值。我在拆包时有个习惯任何模型训练完先跑一个 5 折交叉验证看均值分数和标准差如果标准差太大说明模型对数据划分太敏感这时候去调参数意义不大应该先检查数据质量。3.3 调参实战GridSearchCV 的参数网格与搜索配置资源包的进阶部分通常会在每个算法章节末尾给出调参示例核心工具是GridSearchCV。它能帮你遍历参数组合找到交叉验证分数最高的一组参数。初学者最容易犯的错是把所有参数都丢进网格导致搜索组合数量爆炸一个网格搜索跑几小时还出不来结果。from sklearn.model_selection import GridSearchCV from sklearn.tree import DecisionTreeClassifier # 定义参数网格每个参数给一组候选值 param_grid { max_depth: [3, 5, 7, 9], min_samples_split: [2, 5, 10], min_samples_leaf: [1, 2, 4] } # n_jobs-1 表示使用所有 CPU 核心cv5 表示 5 折交叉验证 grid GridSearchCV( DecisionTreeClassifier(random_state42), param_grid, cv5, scoringf1, n_jobs-1, verbose1 ) grid.fit(X_train, y_train) print(f最优参数{grid.best_params_}) print(f最优交叉验证分数{grid.best_score_:.3f}) # 用最优参数重新训练并评估测试集 best_model grid.best_estimator_ print(f测试集 F1 分数{best_model.score(X_test, y_test):.3f})参数网格里的三个参数要分别说明。max_depth控制树的深度值越大模型越复杂过拟合风险越高min_samples_split是节点继续分裂所需的最小样本数设置大一点可以让树提前停止生长min_samples_leaf是叶节点最少样本数同样起剪枝作用。这三个参数共同约束树的结构搜索组合数为 4×3×336 组配合 5 折交叉验证实际训练 180 次这个量级在普通电脑上几分钟就能跑完。scoringf1表示用 F1 分数作为搜索目标如果你在二分类场景里更关心召回率或精确率可以改成recall或precision。verbose1会打印每个参数组合的训练进度建议第一次跑时打开方便确认搜索没卡死。如果你想把GridSearchCV用对先固定模型的随机种子再搜参最后用最优参数在完整训练集上重新训练这是标准流程。4. 完整项目复现从数据清洗到模型保存的六个关键步骤4.1 环境搭建Python 版本与依赖安装的取舍资源包里的工程代码能不能直接跑起来第一道坎是环境。不同资源包用的 Python 版本和依赖库版本差异很大我拆过的项目里有要求 Python 3.7 搭配旧版 TensorFlow 的也有 Python 3.10 搭配新版 scikit-learn 的。新手最常见的翻车方式是直接全局安装所有依赖结果旧项目把环境搞崩新项目装不上包最后两个都用不了。我一般的处理方式是每个项目单独建虚拟环境。用venv还是conda都可以关键在于把依赖版本固定在项目自己的环境里不让它影响其他项目的 Python 环境。# 创建并激活虚拟环境python3.10 按实际安装版本调整 python3.10 -m venv ml_env source ml_env/bin/activate # 升级 pip 并安装核心依赖 pip install --upgrade pip pip install numpy pandas scikit-learn matplotlib jupyter # 将当前环境依赖导出到 requirements.txt 便于重建 pip freeze requirements.txt虚拟环境的核心价值是隔离。source ml_env/bin/activate之后命令行提示符会多出(ml_env)前缀说明你已经在项目环境里。后续所有pip install都装在这个环境内部不会污染系统 Python。requirements.txt是环境重建的后悔药换电脑或换环境时执行pip install -r requirements.txt就能一键恢复依赖列表。这里有个细节不要用pip install sklearn要装scikit-learn。这个坑我见过太多次前者装的是一个不相干的旧包import 的时候却不会报错直到调用某些 API 时才发现版本不对。资源包里如果提供requirements.txt直接用如果没有装上面四个库加一个 Jupyter 就足够跑完绝大多数入门项目。4.2 数据探索与特征工程先看数据分布再动手建模拿到数据集后直接开训是另一个高频错误。我建议把数据探索当做一个强制流程来走至少完成三个动作看缺失值分布、看特征之间的相关性、看目标变量的数值范围。资源包里的项目一般会附带探索性数据分析的示范代码但很多人嫌麻烦直接跳过结果模型分数低还找不到原因。import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取数据集假设是 CSV 格式 df pd.read_csv(house_data.csv) # 第一步查缺失值占比 missing_ratio df.isnull().mean() print(缺失值占比) print(missing_ratio[missing_ratio 0]) # 第二步特征相关性矩阵 corr_matrix df.corr() print(与目标列相关性最高的前 5 个特征) print(corr_matrix[price].abs().sort_values(ascendingFalse).head(6)) # 第三步目标变量分布直方图 plt.hist(df[price], bins30, edgecolorblack) plt.xlabel(price) plt.ylabel(count) plt.show()缺失值占比超过 30% 的列建议直接删除而不是填充因为填充大量缺失值会引入噪声。相关性矩阵用来观察特征与目标的关系如果某个特征与目标相关性极低可以先删除减少模型复杂度。目标变量如果是长尾分布常见处理是取对数变换让分布更接近正态线性模型通常会更稳定。特征工程这一步有个典型动作叫“创建衍生特征”。比如房价数据集里面积/卧室数代表人均居住空间它可能比单独的面积和卧室数更有预测力。这种特征不来自资源包而是你在分析数据分布后自己发现并添加的这正是手动建模和照着教程敲代码的本质区别。4.3 模型训练与模型保存pipeline 与 joblib 的配合当数据预处理步骤多起来以后直接在训练前手动逐个转换很容易出错。比如你先在训练集上做了缺失值填充测试集上却忘了做同样的填充模型分数就会被毁掉。资源包里的实战代码多数会用Pipeline把预处理和模型串成一个整体这是值得你学走的工程习惯。from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split import joblib # 切分训练集与测试集stratify 仅适用分类回归不需要 X df.drop(price, axis1) y df[price] X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) # 构建 pipeline先标准化再回归 pipeline Pipeline([ (scaler, StandardScaler()), (regressor, LinearRegression()) ]) # 训练整个流水线 pipeline.fit(X_train, y_train) print(f测试集 R² 分数{pipeline.score(X_test, y_test):.3f}) # 保存模型到本地文件预测时直接加载使用 joblib.dump(pipeline, house_price_model.pkl)Pipeline的魅力在于把“标准化”和“回归”绑定成一个独立的估计器。训练时它对训练集计算均值和方差测试时用同一套参数变换测试集避免数据泄露。StandardScaler会把特征缩放到均值 0、方差 1对线性回归这类依赖特征尺度的模型尤其重要。joblib.dump把整个 pipeline 保存为.pkl文件之后在另一段代码里用joblib.load(house_price_model.pkl)就能加载模型做预测。这个习惯越早养成越好——实际工作中模型训练和模型部署通常是分开的环境不会有人每次预测都重新跑一遍训练。4.4 结果可视化与模型解释从系数到预测误差分布训练完成不等于项目结束。资源包里的实战代码通常还会输出两样东西模型的特征权重或重要性和预测值对比散点图。前者帮你解释模型逻辑后者帮你发现模型在哪些区间表现差。import matplotlib.pyplot as plt import numpy as np # 线性回归的特征系数 if hasattr(pipeline, named_steps): regressor pipeline.named_steps[regressor] coefficients regressor.coef_ feature_names X.columns for name, coef in zip(feature_names, coefficients): print(f{name}: {coef:.4f}) # 预测值与真实值对比 y_pred pipeline.predict(X_test) plt.scatter(y_test, y_pred, alpha0.6) plt.plot([y.min(), y.max()], [y.min(), y.max()], r--) plt.xlabel(真实价格) plt.ylabel(预测价格) plt.title(预测值与真实值对比) plt.show()线性回归的系数含义很直白其他特征不变的前提下该特征每增加一个单位目标变量平均变化多少。注意如果做了标准化系数反映的是“一个标准差的变化带来的影响”比较不同特征的系数可以判断它们的重要性排序。散点图里红色的对角线是理想预测线点越贴近对角线说明误差越小。如果点在低价格区间和高价格区间明显偏离说明模型在两端表现差可能需要引入非线性特征。对于决策树模型可以打印tree.feature_importances_看特征重要性。和线性回归的系数不同特征重要性不等于方向只反映“该特征对分类决策的贡献程度”。资源包里如果项目代码没做这一步我建议你补上因为模型解释能力在面试和实际汇报中都是加分项。5. 避坑指南环境、数据、模型三层最容易翻车的五个问题5.1 环境依赖Python 版本不对导致 ImportError 或 API 差异现象照着资源包代码import sklearn然后执行model.fit()结果报ImportError: cannot import name train_test_split from sklearn或者AttributeError: module sklearn has no attribute xxx。这个报错对新手极具迷惑性因为不是语法问题而是 scikit-learn 版本太老或太新API 已经变了。原因资源包作者基于某个特定版本写代码比如sklearn 0.22里有些老 API 在1.2里被移除了。而你在新环境里安装的是最新版接口对不上。另一个常见原因是train_test_split的导入路径不对sklearn.cross_validation是旧路径新版应在sklearn.model_selection。解决先看资源包是否提供requirements.txt有就直接pip install -r requirements.txt。没有就手动装版本适配的库pip install scikit-learn1.2.2这个版本较稳。如果包已经装好但版本太新可以指定降级。装完后执行python -c import sklearn; print(sklearn.__version__)确认版本号再重新跑代码。5.2 数据维度一维数组被当成单特征导致的训练崩溃现象资源包里的数据只有一列特征加一列标签你把X直接传给model.fit()报错ValueError: Expected 2D array, got 1D array instead。明明数据没问题数据格式却让模型拒绝执行。原因scikit-learn 的模型期望输入是二维矩阵形状为 (样本数, 特征数)。当你从 DataFrame 里取一列比如df[area]得到的是一个一维 Series形状是 (n,)模型无法区分这是 1 个特征还是 n 个特征。解决用.reshape(-1, 1)把一维数组变成二维列向量或者用 DataFrame 取多列的方式保留二维结构。常见做法是X df[[area]]注意是双中括号这个写法在实战中高频出现专门用于提取单列作为特征矩阵。这个方法才是避坑的正解。5.3 网格搜索过慢参数组合爆炸导致 CV 跑不出结果现象GridSearchCV运行了半小时还没有任何输出任务管理器里 CPU 虽然满载但控制台看不到进度怀疑是死循环或者数据量太大。原因参数网格组合数太多。比如你给了max_depth5 个候选值、min_samples_split5 个候选值、min_samples_leaf4 个候选值加上 5 折交叉验证实际训练次数为 5×5×4×5500 次数据量再大一点单次训练秒级的话总耗时就是分钟级起步。很多人在参数网格里塞进了七八个参数组合数直接上万。解决先跑一次小网格验证流程比如每参数只给 2 到 3 个候选值确认代码无误后在逐步扩大搜索范围。同时设置verbose1查看当前进度。更高效的做法是先用RandomizedSearchCV做随机搜索指定n_iter50在参数空间里随机采样 50 组效果通常接近网格搜索耗时可少一个量级。5.4 评估指标错配回归问题用了准确率当指标现象预测房价这样的回归任务代码打印出Accuracy: 0.85虽然逻辑回归支持把连续值离散化后计算准确率但这个指标对回归任务没有参考意义。有些初学者在回归任务里调用accuracy_score(y_test, y_pred)得到的结果看似很高实则因为连续性错误。原因混淆了回归与分类的评估体系。回归任务的核心是误差大小用mean_squared_error、mean_absolute_error、R²来衡量。准确率只适用于离散分类标签。解决回归模型直接看model.score()返回的 R² 分数或用mean_absolute_error(y_test, y_pred)输出平均绝对误差。比如平均绝对误差 5 万元意思是你预测的房价平均偏差 5 万这个数对业务方来说比准确率直白得多。资源包里若没有写这段务必加上。5.5 特征泄露预处理时用了全数据集统计量现象模型在训练集上分数极高但测试集分数崩盘两者差距过大。比如训练集 R² 是 0.98测试集直接跌到 0.6怎么调参都拉不回来。原因在切分训练集和测试集之前你对全数据集执行了fillna(df.mean())或StandardScaler.fit(df)。这样测试集的信息已经渗透进了训练过程模型在训练时“见过”测试集的均值和方差属于典型的特征泄露测试集分数虚高。解决严格先切分数据再在训练集上做预处理测试集只用训练集学到的参数做转换。这个流程用 4.3 节的Pipeline可以直接规避因为 pipeline 在fit时只用训练数据计算参数transform测试集时自然复用同一套参数。想人工验证是否存在泄露检查X_train和X_test的均值是否明显不同。6. 进阶验证用一份陌生数据集跑通你的第一个独立机器学习项目看过资源包里所有演示代码之后你需要做一次“不依赖源码”的独立验证。我强烈建议你做这个小项目——预测美国共享单车每小时租借量数据集是 UCI 的 Bike Sharing网上很容易找到 CSV 文件不含隐私问题变量丰富适合检验你对整套流程的掌握程度。先拆分任务目标变量是连续值属于回归问题。特征包括季节、节假日、工作日、温度、体感温度、湿度、风速等。这个数据集最大的特点是温度单位是归一化值0 到 1不是摄氏度直接读数据时容易被误导需要看数据描述文档确认。处理思路可以这样定第一步按 8:2 切分训练集和测试集固定random_state42第二步用Pipeline串联StandardScaler和RandomForestRegressor回归树能捕捉温度和租借量之间的非线性关系比线性模型更适合这个场景第三步输出测试集 R² 分数和平均绝对误差画出预测值与真实值对比散点图第四步用GridSearchCV搜索n_estimators和max_depth的最优组合。跑完这个过程你会发现在资源包里的每个知识点都被串起来了数据清洗、特征处理、模型训练、调参、评估、可视化。这个项目做完你才算真正把“人工智能实战从 Python 入门到机器学习”这份资源变成了自己的东西。值得多说一句的是验证方法评估模型时除了看分数本身还要看预测误差的分布——散点图里如果高价值区间的点明显偏离对角线后面的优化方向应该是增加特征或尝试集成模型而不是盲目调参。那次我用共享单车数据验证时第一次 R² 只有 0.68当时怀疑是模型问题后来发现是湿度特征里有大量缺失被我直接删了补上合理的缺失值填充后分数直接涨到 0.82。从那以后我每次拿到新数据集都强制先走一遍缺失值和相关性分析再开始建模。希望你也能先用好这份资源包再走出自己的第一条实战路线希望帮到你。本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表