"cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# datawhale 零基础入门数据挖掘-task4 建模调参 \n", "\n", "## 四、建模与调参\n", "\n", "tip:此部分为零基础入门数据挖掘的 task4 建模调参 部分,带你来了解各种模型以及模型的评价和调参策略,欢迎大家后续多多交流。\n", "\n", "**赛题:零基础入门数据挖掘 - 二手车交易价格预测**\n", "\n", "地址:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjsx \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source"
看起来你正在查看一个 Jupyter Notebook 的片段,该片段是关于“零基础入门数据挖掘”课程中任务4的部分内容,主要讨论了建模与调参。这个任务是基于一个实际的竞赛项目——“二手车交易价格预测”,该项目由阿里云天池平台提供。 任务 赛题 - 目标: 预测二手车的交易价格。 - 数据来源: 天池平台提供了大量的二手车交易记录,包括车辆的基本信息(如品牌、型号、行驶里程等)和最终的交易价格。 - 链接: [零基础入门数据挖掘 - 二手车交易价格预测](https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjsx) 主要内容 - 建模: 选择合适的机器学习模型来预测二手车的交易价格。 - 调参: 通过调整模型的超参数来优化模型的性能。 建模与调参 1. 数据预处理 在建模之前,通常需要对数据进行预处理,包括: - 缺失值处理: 填充或删除缺失值。 - 特征编码: 将分类变量转换为数值变量(例如,使用 one-hot 编码)。 - 特征缩放: 对数值特征进行标准化或归一化处理。 2. 模型选择 可以选择多种机器学习模型来进行预测,常见的模型包括: - 线性回归: 简单且易于解释,适用于线性关系较强的数据。 - 决策树: 可以处理非线性关系,但容易过拟合。 - 随机森林: 通过集成多个决策树来提高模型的稳定性和准确性。 - 梯度提升树 (GBDT): 通过逐步优化模型来提高预测性能。 - 支持向量机 (SVM): 适用于高维数据,但计算复杂度较高。 - 神经网络: 可以捕捉复杂的非线性关系,但需要大量数据和计算资源。 3. 模型评估 常用的模型评估指标包括: - 均方误差 (MSE): 预测值与真实值之间的平方差的平均值。 - 均方根误差 (RMSE): MSE 的平方根,更直观地反映误差大小。 - 决定系数 (R²): 衡量模型解释数据变异性的能力,范围从 0 到 1,越接近 1 表示模型越好。 4. 调参 可以通过以下方法进行模型调参: - 网格搜索 (Grid Search): 在指定的参数范围内进行穷举搜索,找到最佳参数组合。 - 随机搜索 (Random Search): 在指定的参数范围内随机选择参数组合,通常比网格搜索更高效。 - 贝叶斯优化: 通过构建概率模型来指导参数选择,通常能更快地找到最优参数。 示例代码 以下是一个简单的示例代码,展示了如何使用 `scikit-learn` 进行建模和调参: ```python import pandas as pd from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, r2_score # 加载数据 data = pd.read_csv('data.csv') # 数据预处理 # 假设 'price' 是目标变量,其他列是特征 X = data.drop(columns=['price']) y = data['price'] # 处理缺失值 X.fillna(X.mean(), inplace=True) # 特征编码 X = pd.get_dummies(X) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义模型 model = RandomForestRegressor() # 定义参数网格 param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20, 30], 'min_samples_split': [2, 5, 10] } # 使用网格搜索进行调参 grid_search = GridSearchCV(model, param_grid, cv=5, scoring='neg_mean_squared_error') grid_search.fit(X_train, y_train) # 输出最佳参数 print("Best parameters found: ", grid_search.best_params_) # 使用最佳参数的模型进行预测 best_model = grid_search.best_estimator_ y_pred = best_model.predict(X_test) # 评估模型 mse = mean_squared_error(y_test, y_pred) rmse = mse 0.5 r2 = r2_score(y_test, y_pred) print(f'Mean Squared Error: {mse}') print(f'Root Mean Squared Error: {rmse}') print(f'R² Score: {r2}') ``` 通过上述步骤,你可以完成从数据预处理到模型选择、调参和评估的整个流程。希望这些内容对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。 [2024-11-16 18:04:59 | AI写代码神器 | 1138点数解答]
- [阿里通义] "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# datawhale 零基础入门数据挖掘-task4 建模调参 \n", "\n", "## 四、建模与调参\n", "\n", "tip:此部分为零基础入门数据挖掘的 task4 建模调参 部分,带你来了解各种模型以及模型的评价和调参策略,欢迎大家后续多多交流。\n", "\n", "**赛题:零基础入门数据挖掘 - 二手车交易价格预测**\n", "\n", "地址:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjsx \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source"(1138点数解答 | 2024-11-16 18:04:59)184
- [字节豆包] def hanoi(n, source, target, auxiliary): if n == 1: print(f"Move disk 1 from {source} to {target}") else: # 将n-1个盘子从source移动到auxiliary(借助target) hanoi(n-1, source, auxiliary, target) # 移动第n个盘子 print(f"Move disk {n} from {source} to {target}") # 将n-1个盘子从auxiliary移动到target(借助source) hanoi(n-1, auxiliary, target, source) # 示例:移动3个盘子,从A到C,借助B hanoi(3, 'A', 'C', 'B') (386点数解答 | 2025-06-17 14:19:42)154
- [字节豆包] 用代码 解决以下问题并保证时间限制为1000以内 问题名称 SBACT - Slow Growing Bacteria 问题描述 Given an n×n grid of cells, a bacteria colony can colonize these cells. Their growth after every second is governed by the following rules: One new bacteria is born in cell (i, j) if and only if either one of its four neighboring cells or the cell (i, j) itself has a bacteria population more than or equal to the threshold value, k. Already living bacteria do not die. Given, the initial state of the n×n cell grid, you nee(321点数解答 | 2025-04-11 13:12:04)197
- [阿里通义] 帮我看下,为啥我发送的信息没有标题,标题也没有加速显示,是什么原因,并帮我修改代码 def seed_dingding(self ,msg='预警具体内容', title='预警通知', access_token_list=['****']): access_token =random.choice(access_token_list) url ='https://oapi.dingtalk.com/robot/send?access_token={}'.format(access_token) headers = {'content-type': 'application/json;charset=utf-8'} data = { "msgtype": "markdown", # 发送消息类型为markdown "markdown": { "title": title, # 标题为股票代码、股票名称和涨跌幅(497点数解答 | 2024-10-15 22:54:56)437
- [百度文心] [datax-web, admin jobfailmonitorhelper] error c.w.d.a.c.t.jobfailmonitorhelper - >>>>>>>>>>> datax-web, job fail alarm email send error, joblogid:23 org.springframework.mail.mailsendexception: mail server connection failed; nested exception is javax.mail.messagingexception: could not connect to **tp host: smtp.qiye.aliyun.com, port: 465, response: -1. failed messages: javax.mail.messagingexception: could not connect to **tp host: smtp.qiye.aliyun.com, port: 465, response: -1(345点数解答 | 2024-01-29 15:37:59)399
- 用字典保存已有好友通讯录信息,键为姓名,值为由电话和地址组成的列表。 如:{“小明”:[“001”,”广州’了 通过莱单提示用户对好友通讯录信息循环进行增删改查操作,根据用户选择的处理方式来进行针对性的好友信息管理。其中: 1) 输入数字1,添加好友,输入要添加的好友姓名,电话,地址。首先检查好友是否已经在通讯录中,如果已经存在,输出“用户已存在”,如果不在,添加到通讯录中。(输入信息可以用逗号或空格分隔,用宇符串 splitq方法分隔,形成如下形式的列表i姓名”,”电话”,”地址”了),然后从列表中取出相应信息组成字典的键值对形式,添加到字典中。) (2)输入数字2,删除好友,输入要删除的好友姓名,如果存在则删除,如果不存在,输出“用户不存在。” (3) 输入数字 了,修改好友信息,输入要修改的好友姓名、电话和地址。如果不存在,输出“用户不存在。”,如果存在,更新好友的电话和地址信息。 (4)输入数宇 4,查询好友信息,输入要查询的好友姓名,如果存在则输出好友电话和地址,如果不存在提示“用户不存在。” (5)输入数字 5,退出循环,结束程序(1248点数解答 | 2024-04-23 17:34:25)268
- [字节豆包] 【基础】Even More Odd Photos 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 128MB,其他语言 256MB 难度:基础 分数:100 OI排行榜得分:14(0.1*分数+2*难度) 出题人: 描述 Farmer John 正再一次尝试给他的 N 头奶牛拍照(2≤N≤1000)。 每头奶牛有一个范围在 1…100 之内的整数的「品种编号」。Farmer John 对他的照片有一个十分古怪的构思:他希望将所有的奶牛分为不相交的若干组(换句话说,将每头奶牛分到恰好一组中)并将这些组排成一行,使得第一组的奶牛的品种编号之和为偶数,第二组的编号之和为奇数,以此类推,奇偶交替。 Farmer John 可以分成的最大组数是多少? 输入描述 输入的第一行包含 N。下一行包含 N 个空格分隔的整数,为 N 头奶牛的品种编号。 输出描述 输出 Farmer John 的照片中的最大组数。可以证明,至少存在一种符合要求的分组方案。 用例输入 1 7 1 3 5 7 9 11 13 用例输出 1 3 提示 输入(841点数解答 | 2026-02-03 15:18:32)7
- [字节豆包] 【基础】倒水 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 128MB,其他语言 256MB 难度:基础 分数:100 OI排行榜得分:14(0.1*分数+2*难度) 出题人: 描述 在一个桌子上摆放了n个杯子,每个杯子中有一定量的水。小A同学负责向杯子中倒水,他总共倒了k次,每次会向从第L个杯子到第R个杯子中添加P毫升的水(注意:水只可能增加,不可能减少)。 请问小A同学倒了k次水之后,n个杯子每个杯子有多少毫升的水。 输入描述 第一行包含两个整数n和k。 第二行包含n个整数,表示一开始每个杯子中水的毫升数。 接下来k行,每行包含三个整数L,R,P,表示一次操作。 输出描述 共一行,包含n个整数,表示最终n个杯子每个杯子有多少毫升的水。 用例输入 1 8 3 1 2 10 8 1 5 1 1 7 8 12 1 8 4 2 3 12 用例输出 1 5 18 26 12 5 9 17 17 提示 【数据范围】 1≤n,k≤100000, 1≤L≤R≤n, 0≤P≤1000, 0≤杯子中水的初始量≤1000(160点数解答 | 2026-02-04 21:37:25)10
- [字节豆包] 【基础】龙虎斗 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:基础 分数:100 OI排行榜得分:14(0.1*分数+2*难度) 出题人: 描述 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n个兵营(自左至右编号 1 ~ n),相邻编号的兵营之间相隔 1 厘米,即棋盘为长度为n − 1 厘米的线段。i号兵营里有ci位工兵。 下面图 1 为 n = 6 的示例: 轩轩在左侧,代表“龙”;凯凯在右侧,代表“虎”。 他们以 m 号兵营作为分界,靠左的工兵属于龙势力,靠右的工兵属于虎势力,而第 m号兵营中的工兵很纠结,他们不属于任何一方。 一个兵营的气势为:该兵营中的工兵数 × 该兵营到m号兵营的距离;参与游戏一方的势力定义为:属于这一方所有兵营的气势之和。 下面图 2 为 n = 6,n= 4 的示例,其中红色为龙方,黄色为虎方: 游戏过程中,某一刻天降神兵,共有s1位工兵突然出现在了p1号兵营。作为轩轩和凯凯的朋友,你知道如果龙虎双方气势差距太悬殊,轩轩和凯凯就不愿意(709点数解答 | 2026-02-05 17:06:22)7
- [字节豆包] public static class checkPattern(String regex, String tip) { boolean flag; do { Scanner sc = new Scanner(System.in); String info = sc.next(); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(info); if (!matcher.find()) { System.out.print(tip + "格式错误!请重新输入:"); flag = true; } else { break; } sc.close(); // 增加资源释放 } while (flag); } public class example (510点数解答 | 2025-04-29 15:33:18)220
- [字节豆包] private sub commandbutton3_click() dim ws as worksheet dim rng as range dim cell as range dim combinedarray() as string dim i as long dim j as long dim k as long dim isduplicate as boolean ' 设置工作表对象 set ws = thisworkbook.worksheets("行—原始数据") ' 初始化数组 redim combinedarray(1 to ws.cells(ws.rows.count, "d").end(xlup).row) ' 遍历a列、b列和c列的所有单元格 i = 1 do while not isempty(ws.cells(i, "d")) ' 合并b列和c列的相应单元格 combinedarray(i) = ws.(158点数解答 | 2024-12-26 15:05:50)211
- [字节豆包] Sub DeleteFilesInFolder() Dim folderPath As String Dim fileName As String Dim i As Long Dim lastRow As Long Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") '设文件名列表在Sheet1的A列 folderPath = "D:\600单元试压包\06" '换为文件夹路径 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow fileName = ws.Cells(i, 1).Value If fileName <> "" Then Kill folderPath & fileName End If Next i End Sub(238点数解答 | 2025-01-14 15:03:16)249