#导入第三方库模块 import pandas as pd #读入数据 data = pd.read_csv('titanic_data.csv') #查看数据 print(data.head()) #删除无意义的变量,并检查剩余变量是否有缺失值 # data.drop(['PassengerId','Name','Ticket','Cabin'],axis = 1,inplace=True) #print(data.isnull().sum(axis =0)) #把数据中为空的数据全都统计出来 #对sex进行分组,用各组乘客的平均年龄填充各组中的缺失年龄 fillna_data = [] for i in data.Sex.unique(): updata = data.loc[data.Sex == i,].fillna(value = {'Age':data.Age[data.Sex == i].mean()},inplace = False) fillna_data.append(updata) data = pd.concat(fillna_data) #使用Embarked变量的众数填充值 # data.fillna(value = {'Embarked':data.Embarked.mode([0])},inplace=True) # 将数值型的Pclass转化为类别型,否则无法对其哑变量处理 # data.Pclass = data.Pclass.astype('category') # 哑变量处理 dummy = pd.get_dummies(data[['Sex']]) # 水平合并data数据集和哑变量的数据集 data = pd.concat([data,dummy],axis= 1) # 删除原始的sex,Embarked和Pclass变量 data.drop(['Sex'],inplace=True,axis = 1) print(data.head()) #构建决策树模型 #导入第三方包 from sklearn.model_selection import train_test_split #取出所有的自变量名称 predictors = data.columns[1:] #将数据集拆分为训练集和测试集 X_train,X_test,y_train,y_test = train_test_split(data[predictors],data.Survived,test_size=0.25,random_state=1234) #导入第三方库模块 import warnings warnings.filterwarnings("ignore") #导入第三方库模块 import numpy as np from sklearn import neighbors import matplotlib.pyplot as plt from sklearn.model_selection import cross_val_score #设置待测试的不同的k值 K = np.arange(1,np.ceil(np.log2(data.shape[0]))) #构建空的列表,用于存储平均准确率 accuracy = [] #使用十重交叉验证的方法,比对每一个k值下KNN模型的预测准确率 for k in K: cv_result = cross_val_score(neighbors.KNeighborsClassifier(n_neighbors=int(k), weights='distance'), X_train, y_train, cv=10, scoring='accuracy') accuracy.append(cv_result.mean()) #从k个平均准确率中挑选出最大值对应的下标 arg_max = np.array(accuracy).argmax() #中文和负号的正常显示 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘制不同K值与平均预测准确率之间的折线图 plt.plot(K, accuracy) # 添加点图 plt.scatter(K, accuracy) # 添加文字说明 plt.text(K[arg_max], accuracy[arg_max], '最佳k值为%s' %int(K[arg_max])) # 显示图形 plt.show() #重新构建模型,并将最佳的近邻个数设置为5 knn_class = neighbors.KNeighborsClassifier(n_neighbors = 5, weights = 'distance') #模型训练 knn_class.fit(X_train, y_train) #模型预测 predict = knn_class.predict(X_test) #构建混淆矩阵 cm = pd.crosstab(predict,y_test) #导入第三方模块 import seaborn as sns #将混淆矩阵构造成数据框,并加上字段名和行名称,用于行或列的含义说明 cm = pd.DataFrame(cm) #绘制热力图 sns.heatmap(cm,annot=True,cmap ='GnBu') #添加x轴和y轴的标签 plt.xlabel('Real Labels') plt.ylabel('Predict Labels') #图形显示 plt.show() #导入第三方模块 from sklearn import metrics from sklearn.metrics import accuracy_score #模型整体的预测准确率 print(accuracy_score(y_test,predict)) # 分类模型的评估报告 print(metrics.classification_report(y_test,predict))
knn-实现泰坦尼克号(原始数据表找作者领取)
最新推荐文章于 2023-08-10 09:38:27 发布