目录
1、特征缩放
2、预测CO2 值
3、df列索引扩展
1、特征缩放
特征缩放可以用于不同的度量单位。度量单位不同的情况下,特征的数值大小也会有所不同,这可能会影响到某些机器学习算法的表现。例如,如果一个特征的单位是英寸,而另一个特征的单位是千克,那么这两个特征的数值大小就不能直接进行比较。 在这种情况下,可以使用特征缩放将特特特征的取值范围缩放到相同的范围内,以便更好地利用它们
当然也可以用于不同属性的比较,比如很难将排量 1.0 与车重 790 进行比较,但是如果将它们都缩放为可比较的值,我们可以很容易地看到一个值与另一个值相比有多少
缩放数据有多种方法,在这里我们将使用一种称为标准化(standardization)的方法
标准化方法使用以下公式:z = (x - u) / s
其中 z 是新值,x 是原始值,u 是平均值,s 是标准差
Car | Model | Volume | Weight | CO2 |
---|---|---|---|---|
Toyota | Aygo | 1.0 | 790 | 99 |
如果从上述数据集中获取 weight 列,则第一个值为 790,缩放后的值为:
(790 - 1292.23) / 238.74 = -2.1
如果从上面的数据集中获取 volume 列,则第一个值为 1.0,缩放后的值为:
(1.0 - 1.61) / 0.38 = -1.59
现在,我们可以将 -2.1 与 -1.59 相比较,而不是比较 790 与 1.0
缩放 Weight 和 Volume 列中的所有值
# 创建StandardScaler() 对象
scale = StandardScaler()
df = pandas.read_csv("C:\\Users\\ml\\Desktop\\cars.csv")
X = df[['Weight', 'Volume']]
# `fit_transform(X)` 是 Scikit-learn 中估计器(estimator)类对象的一个方法,用于一次性完成对数据集进行拟合和转换的过程
scaledX = scale.fit_transform(X)
print(scaledX)
G:\python_files\DeepLearning\Scripts\python.exe F:/测试/one.py
[[-2.10389253 -1.59336644]
[-0.55407235 -1.07190106]
[-1.52166278 -1.59336644]
[-1.78973979 -1.85409913]
[-0.63784641 -0.28970299]
[-1.52166278 -1.59336644]
[-0.76769621 -0.55043568]
[ 0.3046118 -0.28970299]
[-0.7551301 -0.28970299]
[-0.59595938 -0.0289703 ]
[-1.30803892 -1.33263375]
[-1.26615189 -0.81116837]
[-0.7551301 -1.59336644]
[-0.16871166 -0.0289703 ]
[ 0.14125238 -0.0289703 ]
[ 0.15800719 -0.0289703 ]
[ 0.3046118 -0.0289703 ]
[-0.05142797 1.53542584]
[-0.72580918 -0.0289703 ]
[ 0.14962979 1.01396046]
[ 1.2219378 -0.0289703 ]
[ 0.5685001 1.01396046]
[ 0.3046118 1.27469315]
[ 0.51404696 -0.0289703 ]
[ 0.51404696 1.01396046]
[ 0.72348212 -0.28970299]
[ 0.8281997 1.01396046]
[ 1.81254495 1.01396046]
[ 0.96642691 -0.0289703 ]
[ 1.72877089 1.01396046]
[ 1.30990057 1.27469315]
[ 1.90050772 1.01396046]
[-0.23991961 -0.0289703 ]
[ 0.40932938 -0.0289703 ]
[ 0.47215993 -0.0289703 ]
[ 0.4302729 2.31762392]]
Process finished with exit code 0
上面是对两列数据进行转化之后的值,其中前两个值是 -2.1 和 -1.59,与我们的计算相对应
2、预测CO2 值
在多元回归一章的任务是在仅知道汽车的重量和排量的情况下预测其排放的二氧化碳。
缩放数据集后,在预测值时必须使用缩放比例
预测一辆重 2300 公斤的 1.3 升汽车的二氧化碳排放量
未缩放之前的代码(多元回归预测中使用到)
import pandas
from sklearn import linear_model
df = pandas.read_csv("C:\\Users\\ml\\Desktop\\cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
# 预测重量为 2300kg、排量为 1300ccm 的汽车的二氧化碳排放量:
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)
缩放之后的代码
import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("C:\\Users\\ml\\Desktop\\cars.csv")
X = df[['Weight', 'Volume']] # 进行列索引,使用数组传递多列
y = df['CO2']
# 这行代码结合了 `fit()` 和 `transform()` 两个步骤,首先使用 `fit()` 方法对数据 `X` 进行拟合,计算出平均值和标准差等统计信息,
# 然后使用 `transform()` 方法将数据进行标准化处理,得到标准化后的数据 `scaledX`
scaledX = scale.fit_transform(X)
# 实例化 `LinearRegression` 对象 `regr`
regr = linear_model.LinearRegression()
regr.fit(scaledX, y)
# 这行代码使用 `transform()` 方法将新数据 `[[2300, 1.3]]` 进行标准化处理,得到标准化后的数据 `scaled`。
# 注意,这里的输入数据必须是一个二维数组,即使只有一个样本也要将其整理成二维数组的形式
#`scaled = scale.transform([[2300, 1.3]])` 是将数据集 `[[2300, 1.3]]` 进行标准化处理的操作。
# 其返回值是一个 NumPy 数组,包含了标准化后的数据
scaled = scale.transform([[2300, 1.3]])
print([scaled[0]]) # [array([ 4.22104928, -4.19730382])]
print(scaled[0]) # [ 4.22104928 -4.19730382]
# `predictedCO2 = regr.predict([scaled[0]])` 中参数为 `[scaled[0]]` 是因为 `predict()` 方法的参数需要是一个二维数组,
# 其中每行表示一个样本,每列表示一个特征。而在这个例子中,只有一个样本,因此需要创建一个只有一行的二维数组。由于 `scaled` 是一个只有一行的二维数组,
# 因此需要将其整体放入一个包含一个元素的列表中,即 `[scaled[0]]`
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
但是经过实际测试,缩放前后不是一个值哇?
3、df列索引扩展
如果没有列,则不能使用列索引对 DataFrame 进行操作
此时可以先将数据存储为一维数组或二维数组,然后再将其转换为 DataFrame。
例如,如果数据是一维数组,可以使用 `numpy` 库中的 `array` 函数将其转换为二维数组,然后再使用 `pd.DataFrame()` 函数将其转换为 DataFrame
import numpy as np
import pandas as pd
# 将一维数组转换为二维数组
# reshape(-1, 1) 中 -1 是系统自动计算转化的数组有多少行,1转化为1列
data = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
# 将二维数组转换为 DataFrame
df = pd.DataFrame(data, columns=['Value'])
在这个例子中,我们首先将一维数组 `[1, 2, 3, 4, 5]` 使用 `reshape(-1, 1)` 转换为一个只有一列的二维数组,然后使用 `pd.DataFrame()` 函数将其转换为一个 DataFrame `df`,其中列名为 `Value`
如果数据是二维数组,则可以直接使用 `pd.DataFrame()` 函数将其转换为 DataFrame,例如
import pandas as pd
# 定义二维数组
data = [[1, 2], [3, 4], [5, 6]]
# 将二维数组转换为 DataFrame
df = pd.DataFrame(data, columns=['Value1', 'Value2'])
在这个例子中,我们定义了一个二维数组 `data`,其中包含两列数据。我们使用 `pd.DataFrame()` 函数将其转换为一个 DataFrame `df`,其中列名分别为 `Value1` 和 `Value2`