用于回归的机器学习¶
——解决回归问题的线性回归-汽车价格预测
(一) 探索性数据分析¶
——Exploratory Data Analysis, EDA · 目标变量的分布 · 此数据集的特征 · 这些特征值的分布 · 数据质量 · 缺失值的数量
1 数据处理-所有列名小写并用下划线代替空格¶
df.columns = df.columns.str.lower().str.replace(' ', '_')
.str.lower()
和 .str.replace(' ', '_')
可以组合使用,这是因为 Pandas 提供了一个强大的字符串操作接口,允许我们在一个链式调用中连续应用多个字符串方法。
#.replace()
¶
Series.str.replace(pat, repl, n=-1, case=True, regex=True)
- pat: 要替换的子字符串或正则表达式。
- repl: 用于替换的字符串。
- n: 最多替换的次数,默认为 -1 表示替换所有匹配项。
- case: 是否区分大小写,默认为 True。
- regex: 是否将
pat
作为正则表达式处理,默认为 True。
2 数据处理-选择带有字符串值的列¶
string_columns = list(df.dtypes[df.dtypes == 'object'].index)
df.dtypes
: 获取DataFrame中每个列的类型。
import pandas as pd
# 创建一个示例DataFrame
data = {
'name': ['John', 'Jane'],
'age': [28, 34],
'city': ['New York', 'Los Angeles']
}
df = pd.DataFrame(data)
print(df.dtypes)
输出:
name object
age int64
city object
dtype: object
df.dtypes
返回一个Series,其中索引是列名,值是列的数据类型。
df.dtypes == 'object'
: 创建一个布尔Series,用于标识哪些列的数据类型为object
。
is_object = df.dtypes == 'object'
print(is_object)
输出:
name True
age False
city True
dtype: bool
这个布尔Series表明哪些列的数据类型是 object
(即字符串类型)。
df.dtypes[df.dtypes == 'object']
: 通过布尔索引过滤出数据类型为object
的列。
object_columns = df.dtypes[df.dtypes == 'object']
print(object_columns)
输出:
name object
city object
dtype: object
这个Series只包含数据类型为 object
的列。
.index
: 获取过滤后的Series的索引,即列名。
object_column_names = object_columns.index
print(object_column_names)
输出:
Index(['name', 'city'], dtype='object')
这一步返回所有字符串列的列名。
list(...)
: 将索引对象转换为列表。
string_columns = list(object_column_names)
print(string_columns)
输出:
['name', 'city']
最终,string_columns
是一个包含所有字符串列名的列表。
3 目标变量分析¶
#.histplot()¶
sns.histplot()
是 Seaborn 库中的一个函数,用于绘制直方图和内核密度估计图(KDE)。直方图用于显示数据分布的近似表示,是数据分析和可视化中非常常用的工具。有以下参数:
- data: 数据集,可以是数组、列表、Pandas Series 或 DataFrame。
- x: 指定用于绘图的变量,通常是 DataFrame 中的列名。
- bins: 指定直方图中的柱子(bin)的数量或边界。
- kde: 是否绘制内核密度估计图,布尔值(
True
或False
)。 - stat: 指定直方图的统计量类型,可以是
'count'
、'frequency'
、'density'
或'probability'
。 - element: 指定直方图元素类型,可以是
'bars'
、'step'
或'poly'
。 - multiple: 指定直方图的堆叠方式,可以是
'layer'
、'dodge'
、'stack'
或'fill'
。 - palette: 指定颜色调色板,用于多类别数据。
- hue: 指定分组变量,用于绘制多个直方图。
#.长尾分布¶
长尾的分布会让我们很难看到分布,但是它对模型的影响会很大,会混淆模型,从而阻碍模型学习的足够好。解决方案是对数变换。 长尾分布:多数集中+长尾现象 对数变换:缩小范围+减小方差(接近正态)+减少极端值的影响+线性化非线性关系「??为啥」
4 检查缺失值¶
5 验证框架¶
(二)回归¶
1 线性回归¶
矩阵什么的数学知识,理解的不大深入 看书后面的附录
2 训练模型¶
呃,用了**标准方程(即,正规方程)**。 \(w=(X^TX)^{-1}X^Ty\)
(三)预测价格¶
1 缺失值处理¶
删掉相关行。用0代替——等同于忽略,不会影响结果。用平均值代替
2 RMSE评估模型¶
——Root Mean Squared Error,均方根误差 \(REMS=\sqrt{\frac{1}{m} \sum_{i=1}^{m} (g(x_i)-y_i)^2}\)
3 验证模型¶
不过是用验证集跑一次而已
4 分类变量¶
ONE-HOT编码(书翻译成“独热编码”也太搞了)
5 正则化¶
控制模型的权重,使其行为正确,不出现增长过大的情况 正则线性回归通常称为岭回归 一种方法是给矩阵的每个对角元素加一个小的数值,\(w=(X^TX+\alpha I)^{-1}X^Ty\) 哭哭哭哭这一领域没搞明白