步骤
1、数据预处理
数据预处理首先需要到机器学习的网址(https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/)选择processed.cleveland.data这个文件,然后复制到excel中,这个下载下来每一列是没有列名的,需要自己手动添加一下。如下图:
读取心脏病数据集
实验的环境是在jupyter notebook里面,可以及时进行交互,可以看到每一步的操作结果。(实验中会用到一些包,需要自己去下载)
import numpy as np
import pandas as pd
heart_dataset = pd.read_csv('newheart.csv')
print("Keys of heartstd_dataset: \n{}".format(heart_dataset.keys()))
读取数据集,然后输出数据集的属性名称。
对数据集中的缺失值进行处理
pd.set_option('display.max_rows',20) # 展示20行
heart_dataset
可以观察到最后一行,倒数第三个数是一个缺失值。下面用代码看看,这个数据集里面一共有多少个缺失值。
heart_dataset.isnull().sum() # 查看数据集是否有缺失值
可以看到,一共有6个缺失值,对缺失值的补充要考虑属性,因为属性大多是类别的属性,所以对缺失值的处理就按照上一个值进行填充。代码如下:
## 使用上一个值替代
df=heart_dataset.fillna(method='ffill')
再使用代码查看是否有缺失值
df.isnull().sum() # 查看数据集是否有缺失值
如下代码可以查看数据集的属性:
df.info()
结果如下图:
对数据集进行标准化处理
可以发现数据集的各个属性的类型不统一,通过一开始的查看数据集,可以发现数据的取值范围也不统一,为了模型的方便处理,接下来对数据集进行标准化处理。
#标准化处理数据集
from sklearn.preprocessing import StandardScaler
x=df[df.columns[0:13]].values #读取前13列的数据,并转换为array类型
x=StandardScaler().fit(x).transform(x) # 进行标准化处理
dfstd=pd.DataFrame(x) #把处理好的数据重新转为DataFrame类型
names=['age','sex','cp','trestbps','chol','fbs','restecg','thalach','exang','oldpeak','slope','ca','thal']
dfstd.columns=names #给标准化的数据添加列名
df['target'].replace([0,1],['no','yes'],inplace=True) #把target中的0替换为no,1替换为yes
dfstd['target']=df['target'] #把类别添加到标准化的数据集中
通过上图可以发现,数据集已经进行了标准化的处理。
主成分分析
在一个数据集有众多的属性的时候,必然会有一些属性是用处不大的,都代入模型中,可能会造成模型的过拟合现象和训练时间比较长。可以通过主成分分析来选择出影响比较大的属性。
##主成分分析
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.font_manager import FontProperties
plt.rcParams['font.sans-serif'] = ['simhei'