机器学习中学习数据的首要任务是数据预处理
1. 数据缺失值处理
不同情况下的数据缺失问题,可以使用不同发方法:
- 针对连续性的缺失数据可以使用数据的均值、中位数等方式填补;
- 针对分类数据可以使用众数等方式填补缺失值;
- 较为复杂的方法是使用样例的k近邻,然后使用K个近邻的均值进行填补。
- 方法: dropna/fillna/isnull/notnull
#生成带有缺失值的数据
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6,5), columns=list('ABCDE'))
df.iloc[2:4,2:4] = np.nan
df.iloc[1,0:2] = np.nan
print(df)
#1.针对数据先使用df.isnull()检查是否有缺失值
print(df.isnull())
#2.使用参数以字典的方式对特征A进行缺失值填补
df.fillna({'A':0.50}, inplace=True)
print(df['A'])
#3.使用向后插补的方法进行填充
print(df['B'].fillna(method="bfill")) #向后插补
#4.使用向前插补的方法进行填充
print(df['C'].fillna(method="ffill")) #向前插补
#5.使用某列的均值填补缺失值
df['D'][df['D'].isnull()] = df['D'].mean()
print(df['D'])
image.png
image.png
2. 数据标准化和LatelEncoder
- 数据标准化能够消除数据之间的量纲,使数据的各个特征在同一水平,尤其是在数据聚类分析、主成分分析中有重要作用
- 使用Sklearn库中preprocessing模块的StandardScaler对鸢尾花数据集进行数据标准化操作,分析数据前后的变化:
from sklearn.preprocessing import LabelEncoder,StandardScaler
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
Iris = pd.read_csv('IRIS.csv')
print(Iris.head())
#作箱线图
Iris.boxplot()
plt.title('标准化前BoxPlot')
plt.show()
#对四个特征进行标准化
scaler = StandardScaler(with_mean=True, with_std=True)
Iris.iloc[:,0:4] = scaler.fit_transform(Iris.iloc[:,0:4])
Iris.boxplot()
plt.title('标准后BoxPlot')
plt.show()
#数据集species或Name类别是字符串,使用LabelEncoder对重新编码:
le = LabelEncoder()
Species = le.fit_transform(Iris['Name'])
print(Species)
#从结果看字符串已经使用0,1,2三种数字分别代替并进行了重新编码,方便以后建模使用。
image.png
image.png
3.数据的非线性特征生成
- 在机器学习中,很多时候需要使用现有数据特征相互组合生成新的数据特征,如特征之间的相乘组成新的特征,特征的平方组成新的特征等。
- Sklearn库的preprocessing模块中的PolynomialFeatures函数可以完成。
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
X = np.arange(8).reshape(4,2)
print(X)
pf = PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)
# degree控制多项式的度,即最多能有几个特征变量的乘积
# interaction_only是否保留交叉项,默认为False
# include_bias是否有常数项,默认为True
X1 = pf.fit_transform(X)
print(X1)
网友评论