使用随机森林与支持向量机实现Adult数据集上的分类

       本文在adult数据集上进行了实验,运用14个基本属性预测工资状况是否高于50K。采用了随机森林和支持向量机的方法进行实验。对原始数据进行了异常值处理和属性数字化的预处理操作,得到实验数据。实验1对数据进行十折交叉验证取十次结果平均值作为最终结果,度量方法为准确率,分别在两种模型上做对比实验。实验2采用两次留出法划分了训练集、验证集、测试集,以验证集为数据、以准确率作为标准调整模型参数,结果分别列出了两种模型下的查全率、查准率和F1值。经过两次实验验证,在adult数据集上,随机森林较支持向量机有更好的分类效果。

1.  Adult数据集预处理(数据预处理见实验2:dealdata函数)

1) 去除缺失值:原始数据中包含缺失数据,需进行清理,采用删除条目的方式去除缺失值。原始数据共计32561条,清理后为30162条。正例共计7508条,反例22654条。

2)属性数字化:原始文件描述属性时使用文字形式,需将文字转化成数字作为模型输入。

2.  实验1:十折交叉方法及准确率度量

十折交叉验证是常用的测试方法。将数据集分成十份,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。

每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计。

import pandas as pd
import numpy as np
from sklearn import svm
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import KFold
import warnings

warnings.filterwarnings("ignore")
# 数据预处理并获得训练集测试集
# 从数据集中获得原始数据
adult_digitization = pd.read_csv("data_cleaned.csv")
# 构造输入和输出
X = adult_digitization[
    ['age', 'workclass', 'fnlwgt', 'education', 'education_number', 'marriage', 'occupation', 'relationship',
     'race',
     'sex', 'capital_gain', 'apital_loss', 'hours_per_week', 'native_country']]
Y = adult_digitization[['income']]
# 交叉验证
preaccrf = []
preaccsvm = []
num = 1
kf = KFold(n_splits=10)
for train, test in kf.split(X):
    X_train, X_test = X.loc[train], X.loc[test]
    Y_train, Y_test = Y.loc[train], Y.loc[test]
    rf = RandomForestClassifier(oob_score=False, random_state=10, criteri
  • 4
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
MNIST数据集是一个手写数字图像数据集,包括60,000个训练样本和10,000个测试样本。这里我们使用R语言搭建支持向量机(SVM)模型来实现数据集分类。 首先,我们需要导入MNIST数据集。R语言中提供了许多方法可以导入MNIST数据集,这里我们使用`read.table`函数以及`matrix`函数来导入数据集。 ```R # 导入训练集 train_data <- as.matrix(read.table("train-images-idx3-ubyte", skip = 16, col.names = paste0("V", 1:784))) train_labels <- read.table("train-labels-idx1-ubyte", skip = 8)$V1 # 导入测试集 test_data <- as.matrix(read.table("t10k-images-idx3-ubyte", skip = 16, col.names = paste0("V", 1:784))) test_labels <- read.table("t10k-labels-idx1-ubyte", skip = 8)$V1 ``` 接下来,我们需要对数据进行归一化处理,将数据范围缩放到[0, 1]之间,这样可以提高SVM模型的效果。 ```R train_data <- train_data / 255 test_data <- test_data / 255 ``` 然后,我们可以使用`e1071`库中的`svm`函数来训练SVM模型。在这里,我们使用径向基函数(RBF)内核,这是一种常用的内核函数。 ```R library(e1071) # 训练SVM模型 svm_model <- svm(train_data, train_labels, kernel = "radial", cost = 5) ``` 最后,我们可以使用`predict`函数来对测试集进行预测,并计算模型的准确率。 ```R # 预测测试集 test_pred <- predict(svm_model, test_data) # 计算准确率 accuracy <- sum(test_pred == test_labels) / length(test_labels) print(paste0("Accuracy: ", accuracy)) ``` 以上就是使用R语言搭建支持向量机实现MNIST数据集分类的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值