其他分享
首页 > 其他分享> > 机器学习-关于心脏病的数据分析

机器学习-关于心脏病的数据分析

作者:互联网

# 本次采用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