机器学习-关于心脏病的数据分析
作者:互联网
# 本次采用KNN算法进行解析 import numpy as np import pandas as pd import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') #用于忽略由于版本更新等不影响的bug import seaborn as sns from matplotlib import rcParams from sklearn.model_selection import train_test_split #训练集和测试机 from sklearn.preprocessing import StandardScaler #归一化处理 from sklearn.model_selection import cross_val_score #交叉验证 from sklearn.neighbors import KNeighborsClassifier
df = pd.read_csv('heart.csv') df.head()
df.info()
df.describe()
# 特征选择,查看特征之间的相关性(热力图-识别预测变量与目标变量相关性) # #DataFrame.corr(method='pearson', min_periods=1) # #method:可选值为{‘pearson’, ‘kendall’, ‘spearman’} # pearson:Pearson相关系数来衡量两个数据集合是否在一条线上面,即针对线性数据的相关系数计算,针对非线性数据便会有误差。 # kendall:用于反映分类变量相关性的指标,即针对无序序列的相关系数,非正太分布的数据 # spearman:非线性的,非正太分布的数据的相关系数 Correlation = df.corr() top_Correlation_feature = Correlation.index #返回各类型之间的相关系数DataFrame表格 plt.figure(figsize=(16,9)) # 设置图像的大小,分别代表长和宽单位为英寸 sns.heatmap(df[top_Correlation_feature].corr(),annot=True,cmap = 'RdYlGn') #annot==True将返回各个具体数值,差异如下 plt.show()
sns.set_style('whitegrid') #设置style为白格 sns.countplot(x='target',data=df,palette='RdBu_r') # palette使用不同的调色板 plt.show()
sns.set_style('whitegrid') sns.countplot(x='target',data=df,palette='RdBu_r') plt.show()
# 数据处理部分:此部分需要使用one-hot编码>>>将该特征抽象成N种不同的状态(pd.get_dummies) # 1、Series里的整数会按照one-hot进行编码,但是在DataFrame里面不会 # 2、特征的维度数量会有所增加 #使用get_dummies 方法为分类变量创建虚拟列 dataset = pd.get_dummies(df, columns = ['sex', 'cp', 'fbs','restecg', 'exang', 'slope', 'ca', 'thal'])# 指定需要实现类别转换的列名-columns standardScaler = StandardScaler()#实例化 columns_to_scale = ['age', 'trestbps', 'chol', 'thalach', 'oldpeak'] dataset[columns_to_scale] = standardScaler.fit_transform(dataset[columns_to_scale]) #拟合数据 dataset.head()
#交叉验证:crosss_val_score>>>sklearn.model_selection.cross_val_score(estimator, X, y=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’) y = dataset['target'] X = dataset.drop(['target'], axis = 1) #axis=1表示横向,axis=0表示纵向,除去target这一列 knn_scores = [] for k in range(1,21):#经验表明,当k大于21时,基本无意义 knn_classifier = KNeighborsClassifier(n_neighbors=k) score = cross_val_score(estimator=knn_classifier,X=X,y=y,cv=10) knn_scores.append(score.mean()) knn_scores
#做可视化处理 plt.plot([k for k in range(1,21)],knn_score) #plt.plot参数为X,y,color等 for i in range(1,21): plt.text(i, knn_scores[i-1], (i, knn_scores[i-1])) #plt.text()函数用于设置文字说明,x,y,设置返回(x,y) plt.xlabel('Number of Neighbors (K)') plt.ylabel('Scores') plt.xticks([i for i in range(1, 21)]) plt.title('K Neighbors Classifier scores for different K values') plt.show()
max(knn_scores)
#KNN knn_classifier = KNeighborsClassifier(n_neighbors = 12) score=cross_val_score(knn_classifier,X,y,cv=10) score.mean()
#使用随机森林,比较其差值 from sklearn.ensemble import RandomForestClassifier randomforest_classifier= RandomForestClassifier(n_estimators=10) score=cross_val_score(randomforest_classifier,X,y,cv=10) score.mean()
本次关于KNN实验还是较为简单,主要了解和使用其基本特征,之后将推出之后的学习经历,
标签:数据分析,knn,plt,机器,df,score,心脏病,scores,import 来源: https://www.cnblogs.com/158-174/p/16464033.html