ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-10 21:02:37  阅读:192  来源: 互联网

标签:数据分析 knn plt 机器 df score 心脏病 scores import


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有