knn-kaggle-titanic

前言

浅浅记录一些处理数据的办法,把代码先放这,先挖坑,以后再填吧。
knn得分是0.622,没有它教学给的那个高。

import numpy as np
import pandas as pd
import os

import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score

'''1. 数据读入'''
train = pd.read_csv('/kaggle/input/titanic/train.csv')
test = pd.read_csv('/kaggle/input/titanic/test.csv')
train = train.set_index('PassengerId')

'''2.查看数据、分析数据'''
#...


'''3. 数据处理'''
#去除无用的特征属性
train = train.drop(['Name', 'Ticket', 'Cabin'], axis=1)
test = test.drop(['Name', 'Ticket', 'Cabin'], axis=1)

#除去数据集中年龄为异常值的样本
mean = train['Age'].mean()
std = train['Age'].std()#计算给定数组沿指定轴线的标准差
cut_off = std*3
lower_bound, upper_bound = mean-cut_off, mean+cut_off
new_train = train[(train['Age'] < upper_bound) & (train['Age'] > lower_bound)]
new_test=test.copy()
 
#将离散型特征属性转化为onehot  将离散型特征的每一种取值都看成一种状态
new_train = pd.get_dummies(new_train, columns = ['Sex', 'Embarked', 'Pclass'])
new_test = pd.get_dummies(new_test, columns = ['Sex', 'Embarked', 'Pclass'])

#处理属性中空缺值 平均值来填补空缺值
new_train.isnull().sum()
new_test.isnull().sum()
age_mean = new_test['Age'].mean()
new_test['Age'] = new_test['Age'].fillna(age_mean).apply(np.ceil)
fare_mean = new_test['Fare'].mean()
new_test['Fare'] = new_test['Fare'].fillna(age_mean)


#归一化
scaler=MinMaxScaler()
new_train.iloc[:,1:] = scaler.fit_transform(new_train.iloc[:,1:].to_numpy())
new_test.iloc[:,1:] = scaler.fit_transform(new_test.iloc[:,1:].to_numpy())


'''4. 训练'''
x_train = new_train.drop(['Survived'], axis=1)
y_train = new_train['Survived']
knn=KNeighborsClassifier()

param_grid = {'n_neighbors': np.arange(1,100)}
#网格搜索和交叉验证
model=GridSearchCV(knn,param_grid,cv=5)
model.fit(x_train,y_train.values.ravel())
print(model.best_params_)#got our best 'n_neighbors' parameter 寻找最好的参数

'''5. 提交'''
predictions = model.predict(new_test)
submission = pd.DataFrame({
    'PassengerId': np.asarray(new_test.PassengerId), 
    'Survived': predictions.astype(int)
})
submission.to_csv('my_submission.csv', index=False)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MORE_77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值