独热编码
本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 53 课,共 64 课。
乐器没有顺序:如果用 1、2、3 编号,钢琴就会被视为比鼓更大。独热编码会为每个类别单独创建一列,用 0/1 表示:
pd.get_dummies 可以完成这项操作,而 dtype=int 会要求使用 1 和 0,而不是 True 和 False:
pupils = pd.DataFrame({"instrument": ["piano", "drums", "piano", "cello"],
"weeks": [4, 3, 6, 10]})
encoded = pd.get_dummies(pupils, columns=["instrument"], dtype=int)
print(encoded)这会打印:
weeks instrument_cello instrument_drums instrument_piano
0 4 0 0 1
1 3 0 1 0
2 6 0 0 1
3 10 1 0 0新列会添加到末尾,每个值对应一列,并按字母顺序排列。代价是表格变宽:500 个不同的值会增加 500 列。
挑战
中等一个度假网站列出了 cabins.csv 中的小屋。程序会读取列名 area 或 heat。起始代码会给它们编号,以便与价格进行相关性分析,但这两列都没有顺序:这个 r 是编造出来的。
- 替换其中的代码行:对该列进行独热编码(0 和 1)。
- 打印它变成了多少列,然后打印每个新列及其值为 1 的数量。
对于 5 间小屋和输入 heat:
heat became 2 columns:
heat_gas: 3 cabins
heat_wood: 2 cabins亲手试试
import pandas as pd
cabins = pd.read_csv("cabins.csv")
column = input()
# 在下方编写你的代码
# 这些代码行给地区和供暖类型编了号,但它们本身没有顺序:请替换这些代码行
numbers = {"coast": 1, "hills": 2, "lake": 3, "woods": 4, "gas": 1, "solar": 2, "wood": 3}
cabins[column] = cabins[column].map(numbers)
print(f"{column} against price: r = {round(cabins[column].corr(cabins['price']), 2)}")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
机器学习统计学中的所有课
自己练习: Python 在线编译器