DAY 8 标签编码与连续变量处理

一、字典的简单介绍

字典(dict):{  }

通过 key 找到是相关联的另一个数据 value ,由一个个 键值对 组成

# 定义字典
my_dict = {"周杰伦":99, "张三":90, "阿里":89}

# 定义空字典
my_dict_empty = {}
my_dict_empty = dict()

# 定义重复key的字典(不允许重复,重复相当于覆盖)
my_dict = {"周杰伦":100, "周杰伦":90, "阿里":89}
print(my_dict) # 输出:{"周杰伦":90, "阿里":89}

# 从字典中基于key获取value 无索引0 1 2...
my_dict = {"周杰伦":99, "张三":90, "阿里":89}
score = my_dict["张三"]
print(score)  # 输出:90

# 定义嵌套字典 key不能为字典
stu_score_dict = {
    '王力宏': {
        '语文': 77,
        '数学': 66,
        '英语': 33
    },
    '周杰伦': {
        '语文': 88,
        '数学': 86,
        '英语': 55
    },
    '林俊杰': {
        '语文': 95,
        '数学': 85,
        '英语': 76
    }
}
print(f'学生的考试信息为:{stu_score_dict}')

# 从嵌套字典中获取数据
score1 = stu_score_dict['王力宏']['数学']
print(f'王力宏的数学成绩为:{score1}')

 字典常用操作:

# 新增和修改 key不存在时为新增,key存在时为修改
字典[key] = value

# 删除 传入一个key,能取到对应的value,同时删除key和value
字典.pop[key]

# 清空  
字典.clear()

# 获取全部的key 用来遍历  字典.keys()
my_dict = {"周杰伦":99, "周杰伦":90, "阿里":89}
keys = my_dict.keys()
print(keys)  # 输出:dict_keys(['周杰伦', '王力宏', '阿里'])

# 遍历字典
for key in keys:
  value = my_dict[key]
  print(f'{key}的value值为:{value}')
# 或者	
for key in my_dict:
  value = my_dict[key]
  print(f'{key}的value值为:{value}')
"""
输出:
	周杰伦的value值为:99
	王力宏的value值为:90
	阿里的value值为:89
"""

# 统计字典内元素数量
count = len(my_dict)
编号 操作 说明
1 字典[Key] 获取指定Key对应的Value值
2 字典[Key] = Value 添加或更新键值对
3 字典.pop(Key) 取出Key对应的Value并在字典内删除此Key的键值对
4 字典.clear() 清空字典
5 字典.keys() 获取字典的全部Key,可用于for循环遍历字典
6 len(字典) 计算字典内的元素数量

读取数据

import pandas as pd
dt = pd.read_csv('data.csv')

二、标签编码

  • 对离散特征的处理中

- 前边学习了对没有顺序和大小关系的离散特征进行独热编码,借助pd.get_dummies()方法

- 今天学习对有顺序和大小关系的离散特征进行标签编码,借助

### 时间变量目标变量在SMOTE中的处理 在应用SMOTE过采样时,时间变量(t)和目标变量(y)的处理方式需要特别注意,因为它们可能具有特殊的语义或结构,不能简单地其他特征变量一视同仁。 #### 时间变量(t)的处理 时间变量通常用于表示数据的时间顺序或时间戳,具有不可逆性和连续性特征。在使用SMOTE进行过采样时,如果时间变量直接参特征空间的插值计算,可能会导致生成的合成样本在时间维度上不具有实际意义。例如,合成的时间戳可能不符合实际场景的时间逻辑。 为了避免这种情况,常见的处理方法包括: - **排除时间变量**:将时间变量从特征空间中移除,仅作为辅助信息保留。这样可以防止SMOTE在时间维度上生成不合理的新样本[^1]。 - **时间变量编码**:将时间变量转换为周期性特征,例如通过正弦和余弦变换将时间戳转换为一天中的小时、一周中的天数等周期性特征。这种处理方式可以保留时间变量的周期性信息,同时避免直接插值带来的问题。 - **自定义距离度量**:在SMOTE中使用自定义的距离度量方式,对时间变量赋予较低的权重或者采用其他非欧氏距离的度量方法,以减少时间变量对插值过程的影响。 #### 目标变量(y)的处理 目标变量通常是分类标签,在SMOTE中不直接参特征空间的插值计算。新生成的样本的目标变量直接继承自其对应的少数类样本。例如,如果原始样本属于类别A,则生成的新样本也会被标记为类别A。这种处理方式保证了目标变量的一致性,同时避免了标签混淆的问题[^1]。 对于多分类任务,SMOTE可以扩展为多类版本(如SMOTE-NC或SMOTE-ENN),以适应目标变量为多类的情况。这些扩展版本在生成合成样本时会考虑不同类别的分布特性。 #### 示例代码 以下是一个使用`imbalanced-learn`库处理时间变量和目标变量的示例代码: ```python from imblearn.over_sampling import SMOTE import pandas as pd import numpy as np # 假设有一个包含时间变量t和目标变量y的数据集 data = pd.DataFrame({ 't': pd.date_range(start='2020-01-01', periods=100, freq='D'), # 时间变量 'x1': np.random.rand(100), # 特征变量 'x2': np.random.rand(100), 'y': np.random.choice([0, 1], size=100, p=[0.9, 0.1]) # 目标变量 }) # 将时间变量t转换为周期性特征 data['hour_of_day'] = np.sin(2 * np.pi * data['t'].dt.hour / 24) data['day_of_week'] = np.cos(2 * np.pi * data['t'].dt.dayofweek / 7) # 保留原始时间变量作为辅助信息 X = data[['x1', 'x2', 'hour_of_day', 'day_of_week']] y = data['y'] # 应用SMOTE进行过采样 smote = SMOTE(random_state=42) X_res, y_res = smote.fit_resample(X, y) ``` 在这个示例中,时间变量`t`被转换为周期性特征(如一天中的小时和一周中的天数),以保留时间信息的同时避免直接插值带来的问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值