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)


你可能感兴趣的:(kaggle,机器学习,python,sklearn)