目录

预处理 - 分类数据


在此页面上,W3schools.com 与纽约数据科学院,为我们的学生提供数字培训内容。


分类数据

当您的数据具有由字符串表示的类别时,很难使用它们来训练通常只接受数字数据的机器学习模型。

您可以转换数据,使其可以在您的模型中使用,而不是忽略分类数据并从我们的模型中排除信息。

看一下下表,它与我们在中使用的数据集相同多重回归章节。

示例

import pandas as pd

cars = pd.read_csv('data.csv')
print(cars.to_string())

结果

             Car       Model  Volume  Weight  CO2
  0       Toyoty        Aygo    1000     790   99
  1   Mitsubishi  Space Star    1200    1160   95
  2        Skoda      Citigo    1000     929   95
  3         Fiat         500     900     865   90
  4         Mini      Cooper    1500    1140  105
  5           VW         Up!    1000     929  105
  6        Skoda       Fabia    1400    1109   90
  7     Mercedes     A-Class    1500    1365   92
  8         Ford      Fiesta    1500    1112   98
  9         Audi          A1    1600    1150   99
  10     Hyundai         I20    1100     980   99
  11      Suzuki       Swift    1300     990  101
  12        Ford      Fiesta    1000    1112   99
  13       Honda       Civic    1600    1252   94
  14      Hundai         I30    1600    1326   97
  15        Opel       Astra    1600    1330   97
  16         BMW           1    1600    1365   99
  17       Mazda           3    2200    1280  104
  18       Skoda       Rapid    1600    1119  104
  19        Ford       Focus    2000    1328  105
  20        Ford      Mondeo    1600    1584   94
  21        Opel    Insignia    2000    1428   99
  22    Mercedes     C-Class    2100    1365   99
  23       Skoda     Octavia    1600    1415   99
  24       Volvo         S60    2000    1415   99
  25    Mercedes         CLA    1500    1465  102
  26        Audi          A4    2000    1490  104
  27        Audi          A6    2000    1725  114
  28       Volvo         V70    1600    1523  109
  29         BMW           5    2000    1705  114
  30    Mercedes     E-Class    2100    1605  115
  31       Volvo        XC70    2000    1746  117
  32        Ford       B-Max    1600    1235  104
  33         BMW         216    1600    1390  108
  34        Opel      Zafira    1600    1405  109
  35    Mercedes         SLK    2500    1395  120
  


运行示例 »

在多元回归章节中,我们尝试根据发动机的体积和汽车的重量来预测二氧化碳排放量,但我们排除了有关汽车品牌和型号的信息。

有关汽车品牌或汽车型号的信息可能有助于我们更好地预测二氧化碳排放量。


广告


一热编码

我们无法使用数据中的“汽车”或“型号”列,因为它们不是数字。无法确定类别变量“汽车”或“车型”与数值变量“CO2”之间的线性关系。

为了解决这个问题,我们必须有分类变量的数字表示。实现此目的的一种方法是使用一列来代表类别中的每个组。

对于每一列,值将为 1 或 0,其中 1 表示包含该组,0 表示排除该组。这种转换称为单热编码。

您不必手动执行此操作,Python Pandas 模块有一个函数,称为get_dummies()它执行一种热编码。

了解有关 Pandas 模块的信息Pandas教程

示例

一热编码汽车专栏:

import pandas as pd

cars = pd.read_csv('data.csv')
ohe_cars = pd.get_dummies(cars[['Car']])

print(ohe_cars.to_string())

结果

      Car_Audi  Car_BMW  Car_Fiat  Car_Ford  Car_Honda  Car_Hundai  Car_Hyundai  Car_Mazda  Car_Mercedes  Car_Mini  Car_Mitsubishi  Car_Opel  Car_Skoda  Car_Suzuki  Car_Toyoty  Car_VW  Car_Volvo
  0          0        0         0         0          0           0            0          0             0         0               0         0          0           0           1       0          0
  1          0        0         0         0          0           0            0          0             0         0               1         0          0           0           0       0          0
  2          0        0         0         0          0           0            0          0             0         0               0         0          1           0           0       0          0
  3          0        0         1         0          0           0            0          0             0         0               0         0          0           0           0       0          0
  4          0        0         0         0          0           0            0          0             0         1               0         0          0           0           0       0          0
  5          0        0         0         0          0           0            0          0             0         0               0         0          0           0           0       1          0
  6          0        0         0         0          0           0            0          0             0         0               0         0          1           0           0       0          0
  7          0        0         0         0          0           0            0          0             1         0               0         0          0           0           0       0          0
  8          0        0         0         1          0           0            0          0             0         0               0         0          0           0           0       0          0
  9          1        0         0         0          0           0            0          0             0         0               0         0          0           0           0       0          0
  10         0        0         0         0          0           0            1          0             0         0               0         0          0           0           0       0          0
  11         0        0         0         0          0           0            0          0             0         0               0         0          0           1           0       0          0
  12         0        0         0         1          0           0            0          0             0         0               0         0          0           0           0       0          0
  13         0        0         0         0          1           0            0          0             0         0               0         0          0           0           0       0          0
  14         0        0         0         0          0           1            0          0             0         0               0         0          0           0           0       0          0
  15         0        0         0         0          0           0            0          0             0         0               0         1          0           0           0       0          0
  16         0        1         0         0          0           0            0          0             0         0               0         0          0           0           0       0          0
  17         0        0         0         0          0           0            0          1             0         0               0         0          0           0           0       0          0
  18         0        0         0         0          0           0            0          0             0         0               0         0          1           0           0       0          0
  19         0        0         0         1          0           0            0          0             0         0               0         0          0           0           0       0          0
  20         0        0         0         1          0           0            0          0             0         0               0         0          0           0           0       0          0
  21         0        0         0         0          0           0            0          0             0         0               0         1          0           0           0       0          0
  22         0        0         0         0          0           0            0          0             1         0               0         0          0           0           0       0          0
  23         0        0         0         0          0           0            0          0             0         0               0         0          1           0           0       0          0
  24         0        0         0         0          0           0            0          0             0         0               0         0          0           0           0       0          1
  25         0        0         0         0          0           0            0          0             1         0               0         0          0           0           0       0          0
  26         1        0         0         0          0           0            0          0             0         0               0         0          0           0           0       0          0
  27         1        0         0         0          0           0            0          0             0         0               0         0          0           0           0       0          0
  28         0        0         0         0          0           0            0          0             0         0               0         0          0           0           0       0          1
  29         0        1         0         0          0           0            0          0             0         0               0         0          0           0           0       0          0
  30         0        0         0         0          0           0            0          0             1         0               0         0          0           0           0       0          0
  31         0        0         0         0          0           0            0          0             0         0               0         0          0           0           0       0          1
  32         0        0         0         1          0           0            0          0             0         0               0         0          0           0           0       0          0
  33         0        1         0         0          0           0            0          0             0         0               0         0          0           0           0       0          0
  34         0        0         0         0          0           0            0          0             0         0               0         1          0           0           0       0          0
  35         0        0         0         0          0           0            0          0             1         0               0         0          0           0           0       0          0


运行示例 »

结果

在“汽车”栏目中为每个汽车品牌创建了一个栏目。


预测二氧化碳

我们可以使用这些附加信息以及体积和重量来预测二氧化碳

为了合并信息,我们可以使用concat()来自 pandas 的函数。

首先我们需要导入几个模块。

我们将从Import Panda开始。

import pandas

pandas 模块允许我们读取 csv 文件并操作 DataFrame 对象:

cars = pandas.read_csv("data.csv")

它还允许我们创建虚拟变量:

ohe_cars = pandas.get_dummies(cars[['Car']])

然后我们必须选择自变量 (X) 并按列添加虚拟变量。

还将因变量存储在 y 中。

X = pandas.concat([cars[['Volume', 'Weight']], ohe_cars], axis=1)
y = cars['CO2']

我们还需要从 sklearn 导入一个方法来创建线性模型

学习关于线性回归

from sklearn import linear_model

现在我们可以将数据拟合为线性回归:

regr = linear_model.LinearRegression()
regr.fit(X,y)

最后,我们可以根据汽车的重量、体积和制造商来预测二氧化碳排放量。

##predict the CO2 emission of a Volvo where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]])

示例

import pandas
from sklearn import linear_model

cars = pandas.read_csv("data.csv")
ohe_cars = pandas.get_dummies(cars[['Car']])

X = pandas.concat([cars[['Volume', 'Weight']], ohe_cars], axis=1)
y = cars['CO2']

regr = linear_model.LinearRegression()
regr.fit(X,y)

##predict the CO2 emission of a Volvo where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]])

print(predictedCO2)

结果

 [122.45153299]


运行示例 »

现在我们有了数据集中的体积、重量和每个汽车品牌的系数


假人化

无需为类别中的每个组创建一列。可以使用比您拥有的组数少 1 列来保留信息。

例如,您有一个代表颜色的列,并且在该列中,您有两种颜色:红色和蓝色。

示例

import pandas as pd

colors = pd.DataFrame({'color': ['blue', 'red']})

print(colors)

结果

    color
  0  blue
  1   red


运行示例 »

您可以创建 1 个名为红色的列,其中 1 代表红色,0 代表非红色,即蓝色。

为此,我们可以使用与一种热编码相同的函数 get_dummies,然后删除其中一列。有一个参数 drop_first,它允许我们从结果表中排除第一列。

示例

import pandas as pd

colors = pd.DataFrame({'color': ['blue', 'red']})
dummies = pd.get_dummies(colors, drop_first=True)

print(dummies)

结果

     color_red
  0          0
  1          1


运行示例 »

如果你有超过 2 个组怎么办?如何用少 1 列来表示多个组?

假设这次我们有三种颜色:红色、蓝色和绿色。当我们 get_dummies 并删除第一列时,我们得到下表。

示例

import pandas as pd

colors = pd.DataFrame({'color': ['blue', 'red', 'green']})
dummies = pd.get_dummies(colors, drop_first=True)
dummies['color'] = colors['color']

print(dummies)

结果

     color_green  color_red  color
  0            0          0   blue
  1            0          1    red
  2            1          0  green


运行示例 »