举个栗子🌰
假设你有一个包含用户信息的表格数据(如 CSV 文件),结构如下表1.1:(判断用户“是否会购买”这个问题)
预估薪资(元) | 是否会购买 | 年龄 | 性别 |
---|---|---|---|
5000 | 是 | 25 | 男 |
8000 | 否 | 30 | 女 |
3000 | 是 | 22 | 女 |
表1.1
一、算法测试
划分特征X于y(字段名:是否会购买)
X = data[’预估薪资’],y = data['是否会购买']
1. 代码意义
这两行代码的作用是 从数据集中提取特征变量(X)和目标变量(y),为机器学习模型的训练和预测做准备。
X = data['预估薪资']
:
从数据集data
中提取名为预估薪资
的列作为 特征(Feature),即模型的输入变量。例如,用户的收入水平可能影响其购买决策。
y = data['是否会购买']
:
从数据集data
中提取名为是否会购买
的列作为 目标(Target),即模型的输出变量。这是一个二分类标签(如“是”或“否”),表示用户最终是否购买了产品。
2. 使用场景
- 监督学习任务:通过历史数据(特征
X
和标签y
)训练模型,预测新用户的购买行为。 - 分类模型:如逻辑回归、决策树、随机森林等,用于解决“是否会购买”这类二分类问题。
3. 用法步骤
(1) 数据准备,如表1.1
(2) 提取特征和目标
import pandas as pd
# 加载数据集(假设 data 是 DataFrame)
data = pd.read_csv("user_data.csv")
# 提取特征(X)和目标(y)
X = data['预估薪资'] # 一维特征(薪资)
y = data['是否会购买'] # 二分类目标(是/否)
(3) 数据预处理
目标变量编码:将“是/否”转换为数值(1/0)。
y = y.map({'是': 1, '否': 0}) # 转换为 1 和 0
特征工程:如果使用单个特征(薪资)效果不佳,可以添加其他特征(如年龄、性别)。
X = data[['预估薪资', '年龄', '性别']]
# 多特征
X['性别'] = X['性别'].map({'男': 1, '女': 0}) # 性别编码
(4) 训练模型
以逻辑回归为例:
4. 完整代码示例
5. 重塑数据形状
1. 代码
reshape(-1, 1)
:
将数据从 一维数组(例如[1, 2, 3, 4]
)转换为 二维数组(例如[, , , ]
),即每个样本作为一个行向量。-
-1
表示自动计算该维度的大小(总样本数不变)。 -
1
表示每个样本有 1 个特征(单变量数据)。
-
.values
:
如果X_train
或X_test
是 Pandas DataFrame 或 Series,.values
会将其转换为 NumPy 数组。
2. 使用场景
当你的数据是 单变量(只有 1 个特征),但模型要求输入为二维数组时,必须进行此操作。例如:
- Scikit-learn 模型(如
LinearRegression
、SVM
)要求输入形状为(n_samples, n_features)
。 - 若直接使用一维数据会报错:
ValueError: Expected 2D array, got 1D array instead
。
示例数据
3. 用法示例
(1) 数据准备
(2) 重塑数据形状
(3) 训练模型
重塑数据形状总结
- 用途:将一维数据转换为二维,满足模型输入要求。
- 核心方法:
reshape(-1, 1)
。 - 适用场景:单变量数据(如时间序列预测、单特征回归/分类)。
6. 注意事项
特征维度:
- 单个特征(如薪资)需用
.reshape(-1, 1)
转为二维数组((n_samples, 1)
)。 - 多特征(如薪资+年龄+性别)直接使用
data[['列1', '列2']]
提取即可。
- 单个特征(如薪资)需用
数据维度检查:
使用X_train.shape
确认数据形状,避免不必要的重塑:不要滥用
reshape
:- 如果数据本身就是二维的(例如多变量数据),无需此操作。
- 错误使用会破坏数据结构,例如将
(100, 2)
强行转为(200, 1)
。
数据类型:
- 确保特征为数值型(如薪资、年龄),非数值型数据(如性别)需编码(如男=1,女=0)。
分类平衡:
- 如果“是”和“否”样本数量差异大(如 90% 是“否”),模型可能偏向多数类,需使用过采样(如 SMOTE)或调整类别权重。
6.Pandas 与 NumPy 转换:
1.如果数据已经是 NumPy 数组,直接使用 .reshape()
,无需 .values
:
X_train = X_train.reshape(-1, 1)
7.多变量数据:
1. 如果数据是多变量(例如 (n_samples, 3)
),无需额外处理,直接输入模型即可。
总结
- 代码核心目的:为机器学习模型准备输入(X)和输出(y)数据。
- 典型应用:用户行为预测、市场营销分析等二分类问题。
- 扩展性:可添加更多特征(如年龄、浏览历史)提升模型效果。