K最近邻:泰坦尼克号乘客生还预测

 

 

现在我们需要关注的是如何用 knn 根据当前给出的数据情况来预测未知样本的生还情况,已知生还的是有 886行8列,未知的是有 5行7列。

 同理可得我们可以根据之前电影名称中的打斗镜头和接吻镜头的数量的多少来判断这个电影是爱情片还是动作片,同样可根据后来的电影镜头中的打斗镜头和接吻镜头的数量多少来判断未知的电影是属于什么类型。

 

想要了解一个人,就去看看他的朋友,由你的邻居来判断出你的类别,首先给定测试对象,计算它与训练集中的每个对象的距离,同时圈定距离最近的K个训练对象,作为测试对象的近邻,根据这K个近邻归属的主要类别来对测试对象分类。K近邻的优点是简单有效和容易理解,它的缺点是需要保存全部数据集,因此对内存消耗大,当数据集较大时对设备要求非常高;需要计算每个未知点到全部已知点的距离,可能会很耗时。

'''step1 调用包'''
## 导入训练数据
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
#调用算法、数据集、预处理
from sklearn import  preprocessing 
from sklearn import neighbors
#调用准确率计算函数
from sklearn.metrics import accuracy_score  

'''step2 导入数据'''
titanic = pd.read_csv("data_titanicKNN.csv")

'''step3 数据预处理'''
# 把带类标号数据(用于训练和检验)
# 和待判(最后7行)数据分开
data_used = titanic.iloc[:886,] 
#Python从0开始计数,故上一行代码从第0行取到第885行
#共提取了886行。

#最后5行为待判集合,去掉第一列未知的类标号
data_unused = titanic.iloc[886:,1:]

'''step4 划分数据集'''
X = data_used.iloc[:,1:]
y= data_used.iloc[:,0]

X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size = 0.25, random_state = 123)

#数据标准化
scaler = preprocessing.StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
#用训练集的数字特征对测试集进行标准化
X_test = scaler.transform(X_test) 
'''step5 模型计算(训练、检验、评价)'''
##step5.1 训练模型  调用KNN算法包训练模型
knn = neighbors.KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train,y_train)

##step5.2 检验模型
y_pred = knn.predict(X_test)

#step5.3 模型评价(准确率)
#这里y_test为真实检验集类标号
#pred_test为模型预测的检验集类标号
#比较二者即可得到准确率

acc_test = accuracy_score(y_test,y_pred)
print('检验准确率为:',np.round(acc_test,2))

'''step6 预测结果'''
#模型训练完,检验效果满意,即可对最后5行
#乘客生还情况预测
pred_unused = knn.predict(data_unused)
print('待判样本预测类别为:',pred_unused)

1.调用需要的包

'''step1 调用包'''
## 导入训练数据
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
#调用算法、数据集、预处理
from sklearn import  preprocessing 
from sklearn import neighbors
#调用准确率计算函数
from sklearn.metrics import accuracy_score 

此时除了导入常用的 numpy、pandas、train_test_split 函数之外,还导入用于数据集和预处理的 preprocessing 和 neighbors 函数,同时调用准确率计算函数。

2.导入数据

'''step2 导入数据'''
titanic = pd.read_csv("data_titanicKNN.csv")

 3.数据预处理

'''step3 数据预处理'''
# 把带类标号数据(用于训练和检验)
# 和待判(最后7行)数据分开
data_used = titanic.iloc[:886,] 
#Python从0开始计数,故上一行代码从第0行取到第885行
#共提取了886行。

#最后5行为待判集合,去掉第一列未知的类标号
data_unused = titanic.iloc[886:,1:]

将用于训练检验的数据和待判数据分开,同时在待判数据集中将未知的类标号去掉。 

4.数据集划分和数据标准化

'''step4 划分数据集'''
X = data_used.iloc[:,1:]
y= data_used.iloc[:,0]

X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size = 0.25, random_state = 123)

#数据标准化
scaler = preprocessing.StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
#用训练集的数字特征对测试集进行标准化
X_test = scaler.transform(X_test) 

划分完数据集之后我们看到数据集之间数值差异较大,所以这时要进行数据标准化处理。

这段代码是使用sklearn中的StandardScaler对训练数据X_train和测试数据X_test进行标准化处理的。具体步骤:

(1). 从sklearn.preprocessing中导入StandardScaler。

(2). 在训练集X_train上调用StandardScaler的fit方法,将训练集的数据拟合到标准化对象中。

(3). 在训练集X_train上调用StandardScaler的transform方法,使用上一步的缩放参数对训练集进行标准化,结果存储到X_train中,覆盖原来的训练集。

(4). 同样在测试集X_test上调用transform方法,使用训练集的缩放参数对测试集进行标准化,结果存储到X_test中,覆盖原来的测试集。

这样,通过使用训练集的数据拟合StandardScaler模型,然后应用到训练集和测试集,实现了对两组数据的标准化处理。标准化对许多机器学习算法来说是重要的预处理步骤,可以消除不同特征因不同单位而造成的数据范围差异,把所有特征映射到同一数量级上,为模型的训练和预测提供更可靠的数据。使用从x_train中计算得来的均值和标准差应用于新数据的标准化。

5.模型计算(训练、检验、评价)

'''step5 模型计算(训练、检验、评价)'''
##step5.1 训练模型  调用KNN算法包训练模型
knn = neighbors.KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train,y_train)

数据准备好之后接下来就是进行模型的拟合了。

##step5.2 检验模型
y_pred = knn.predict(X_test)
#step5.3 模型评价(准确率)
#这里y_test为真实检验集类标号
#pred_test为模型预测的检验集类标号
#比较二者即可得到准确率
acc_test = accuracy_score(y_test,y_pred)
print('检验准确率为:',np.round(acc_test,2))

6. 结果预测

'''step6 预测结果'''
#模型训练完,检验效果满意,即可对最后5行
#乘客生还情况预测
pred_unused = knn.predict(data_unused)
print('待判样本预测类别为:',pred_unused)

拟合和训练完模型之后最重要的就是用来进行预测了,为我们下一步的决策提供依据。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用knn算法对泰坦尼克号数据进行分类可以分为以下几个步骤: 1. 导入数据:使用read.csv函数将泰坦尼克号数据导入R中。 2. 数据预处理:对数据进行一些预处理,如删除缺失值、转换变量类型、对分类变量进行编码等。 3. 划分数据集:将数据集分为训练集和测试集,一般按照7:3或8:2的比例进行划分。 4. 特征标准化:对数据进行标准化处理,使得所有特征都在相同的尺度上。 5. 训练模型:使用knn函数训练knn模型,指定k值和距离度量方法等参数。 6. 预测结果:使用训练好的knn模型对测试集进行预测,并计算预测准确率。 以下是一个简单的R语言代码示例: ```R # 导入数据 data <- read.csv("titanic.csv") # 数据预处理 data <- na.omit(data) # 删除缺失值 data$Sex <- as.factor(data$Sex) # 将Sex变量转换为因子变量 data$Embarked <- as.factor(data$Embarked) # 将Embarked变量转换为因子变量 data <- data[,c(2,4,5,6,7,9,11)] # 选择需要的变量 # 划分数据集 library(caTools) set.seed(123) split <- sample.split(data$Survived, SplitRatio = 0.7) train <- subset(data, split == TRUE) test <- subset(data, split == FALSE) # 特征标准化 library(caret) preProcValues <- preProcess(train[,1:6], method = c("center", "scale")) train[,1:6] <- predict(preProcValues, train[,1:6]) test[,1:6] <- predict(preProcValues, test[,1:6]) # 训练模型 library(class) k <- 5 # 指定k值 trainLabels <- train$Survived trainFeatures <- train[,1:6] testLabels <- test$Survived testFeatures <- test[,1:6] knnModel <- knn(trainFeatures, testFeatures, trainLabels, k = k, prob = TRUE) # 预测结果 confusionMatrix(table(knnModel, testLabels)) ``` 在这个示例中,我们使用了R语言中的一些常用库,如caTools、caret和class等。具体地,我们使用了sample.split函数将数据集划分为训练集和测试集,并使用preProcess函数对特征进行标准化处理。然后,我们使用knn函数训练knn模型,并使用confusionMatrix函数计算预测准确率。在这个示例中,我们指定k值为5,使用欧氏距离作为距离度量方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值