由于最近也有在学习python,所以之后的机器学习相关文章的代码均由python实现
数据预处理
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
一、依赖库
NumPy:是一个包含数学计算函数的库
Pandas:用于导入文件和管理数据集
后面补充一些常用的函数
二、数据集
由于csv文件纯文本格式,所以一般都以csv文件作为数据集。
文件的每一行便是一条数据记录。我们可以将读取到的每一行的数据作为一个数据帧来制作矩阵或者向量等。
读取数据csv文件可以使用Pandas库:
import pandas as pd
#显示所有行
pd.set_option('display.max_rows', None)
test = pd.read_csv('文件路径')
read_csv()方法读取文件时,会自己加上head 以及 行数,也可以设置不要head,或者设置数据的第几行为head:
test = pd.read_csv('文件路径',header=None) #不要head
test = pd.read_csv('文件路径',header=0) #以首行作为头
三、清理数据
通常我们获取到的数据并不一定是完整的,会有一些缺失的数据,这种时候就需要来对这些缺失的数据作处理:
1⃣️一般数值类的列可以采取求出均值填补的方法;
2⃣️当缺失的数据相对于总的数据量非常小的时候可以采取删除的方法;
以上是比较简单常用的方法
辅助处理的库有:
sklearn.preprocessing 中的Imputer类来处理
# missing_values 设置缺失值,可以为整数或者NaN
# strategy 替换缺失值的策略: 1、mean,用特征列的均值替换 2、median,用特征列的中位数数进行替换 3、most_frequent,用特征列的众数替换
# axis 指定轴数, 0:表示选取的是列,1:表示的是行 ,默认为0
# copy :True 表示不在原数据集修改 ,False 表示在原数据集进行修改; 存在如下情况时,即使设置为False时,也不会就地修改: a、不是浮点值数组
# b、X是稀疏且missing_values=0 c、axis=0且X为CRS矩阵 d、axis=1且X为CSC矩阵
test_array = np.array([[1, 2],
[np.nan, 3],
[4, 5]])
imp = Imputer(missing_values=np.nan, strategy='mean', axis=0, verbose=0, copy='False')
imp.fit(test_array)
print(test_array)
print(imp.transform(test_array))
结果:
print(test_array):[[ 1 2.][nan 3.][ 4. 5.]]
print(imp.transform(test_array)):[[1. 2. ][2.5 3. ][4. 5. ]]
四、处理分类数据
分类数据通常是指含有标签值而不是数值型的数据,如yes等。所以需要最这一类数据进行处理
辅助处理的库有:
sklearn.preprocessing中的LabelEncoder标签类进行处理
# LabelEncoder 处理类别型数据
# LabelEncoder是对不连续的数字或者英文等从1~n进行编号,比如这里有一批标签{A,A,B,B,C,D,D}
# 那么这里标签的种类就有 :A B C D,且是根据字典排序的,那么相应的标签对应的序号便是 0,1,2,3
# 所以同理{D,A,A,C,B}=> {3,0,0,2,1}
label = LabelEncoder()
test_label2 = test_csv.get('MSZoning')
print("标签值:%s" % test_label2)
label_result = label.fit(test_label2)
result = label_result.transform(test_label2)
print("标签 %s:" % label.classes_)
print("标准话后:%s" % result)
五、拆分数据集
将数据集按一定的比例拆分为训练集和测试集,一般的比例是8:2。这样的做法也可以用来做交叉验证。
辅助处理的库有:
sklearn.model_selection中的train_test_split
# 按一定的比例处理数据集为训练集和测试集
# train_test_split(*array,test_size=0.25,train_size=None,random_state=None,shuffle=True,stratify=None)
# *array:被切分的数据源 test_size:测试集的比例 test_size+train_size =1
# shuffle:对数据切分前是否洗牌 stratify:是否分层抽样切分数据
# 用0-9来创建一个5*2的数组 X
X = np.arange(10).reshape((5, 2))
print(X)
X_train, X_test = train_test_split(X, test_size=0.2,random_state=42)
print("训练集:%s" % X_train)
print("测试集:%s" % X_test)
六、特征缩放
由于数据集通常比较大,且范围比较广。可以使用特征标准化来解决。
特征标准化:是将样本数据中的每一列特征缩放到一个统一的尺度。
辅助处理的库有:
sklearn.preprocessing中的StandardScaler:
# 特征标准化
# StandardScaler
# 创建
Y = np.random.randn(10, 2)
print("原始数据: %s" % Y)
scaler = StandardScaler()
scaler.fit(Y)
Y_result = scaler.transform(Y)
print("特征处理后的数据: %s" % Y_result)