文章目录
数据导入与预处理
首先是导入本次数据挖掘所需用到的所有包
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from mpl_toolkits.mplot3d import Axes3D
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.neighbors import KNeighborsClassifier,KNeighborsRegressor
from sklearn.preprocessing import StandardScaler
from sklearn import svm
import seaborn as sns
接着,我们导入磁盘数据,并对数据进行基本的处理
file_path='data\smart dataset sample.csv'
df=pd.read_csv(file_path)
data=df.iloc[:,3:]
X=data.iloc[:,1:]
Y=data.iloc[:,0]
# 删去特征全为空的样本
X.dropna(how='all',inplace=True)
Y=Y.iloc[X.index]
X=X.reset_index(drop=True)
Y=Y.reset_index(drop=True)
一开始导入的数据表df如下图所示
共有14个字段,11036个样本,我们先去除前三个无用的字段得到新的数据表data,再将smart特征和标签failure分开为X和Y
对于X,我们先删去特征值全为空的磁盘样本,总共删去一个样本之后,再同步更新数据集X和Y,最后reset X和Y的index,得到的X和Y如下图所示
X数据集
Y数据集
缺失值填补
我们有多种缺失值填补的方法(均值填补,众数填补,回归填补,自编码神经网络填补)
其中让我感到意外的是,采用均值填补的数据集在cross_val_score
评估中,表现是最好的,关于这点的分析我会在之后进行分析
KNN_classifier填补
# KNN回归填补空缺值
from sklearn.neighbors import KNeighborsClassifier,KNeighborsRegressor
def knn_missing_filled(train_x,train_y,test,k=3,dispersed=True):
if dispersed:
clf=KNeighborsClassifier(n_neighbors=k,weights='distance',n_jobs=-1)
else:
clf=KNeighborsRegressor(n_neighbors=k,weights='distance',n_jobs=-1)
clf.fit(train_x,train_y)
return test.index,clf.predict(test)
RandomForest填补
# randomforest填补空缺值
from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier # 随机森林回归
def randomforest_missing_filled(train_x,train_y,test,dispersed=True):
if dispersed:
clf=RandomForestClassifier(n_estimators=10)
else:
clf=RandomForestRegressor(n_estimators=10)
clf.fit(train_x,train_y)
return test.index,clf.predict(test)
自编码神经网络填补
自编码神经网络的模型示例如上图所示,其将输入进行encode并压缩,提取重要特征,然后进行decode,恢复数据,本质上就是学习了一个函数 f W , b ( X ) = X f_{W,b} (X)=X fW,b(X)=X。
我们可以将完整的数据作为训练集 X X X输入自编码神经网络进行学习,通过不断的迭代提取出数据的分布和特征,然后我们将含有缺失值的数据块 X ′ X' X