交叉验证代码实现

本文介绍了一种基于SVM的支持向量机分类器实现的5折交叉验证迁移学习方法。该方法利用numpy进行数据处理,并使用sklearn库中的LinearSVC进行训练与预测。通过对两个不同视图的数据集进行划分和训练,评估了从一个视图到另一个视图的迁移学习效果。
部署运行你感兴趣的模型镜像
import numpy
import math
from sklearn import svm
from sklearn.metrics import accuracy_score
import sys


def svm_classifier(train_x, train_y, valid_x, valid_y, test_x, test_y):


clf = svm.LinearSVC()
clf.fit(train_x,train_y)
pred = clf.predict(valid_x)
va = accuracy_score(numpy.ravel(valid_y),numpy.ravel(pred))
pred = clf.predict(test_x)
ta = accuracy_score(numpy.ravel(test_y),numpy.ravel(pred))
return va, ta


def transfer_learning_5fold(folder):


view1 = numpy.load(folder+"test-view1.npy")
view2 = numpy.load(folder+"test-view2.npy")
labels = numpy.load(folder+"test-labels.npy")


perp = len(view1)/5


print "view1 to view2"


acc = 0
for i in range(0,5):
test_x = view2[i*perp:(i+1)*perp]
test_y = labels[i*perp:(i+1)*perp]
if i==0:
train_x = view1[perp:len(view1)]
train_y = labels[perp:len(view1)]
elif i==4:
train_x = view1[0:4*perp]
train_y = labels[0:4*perp]
else:
train_x1 = view1[0:i*perp]
train_y1 = labels[0:i*perp]
train_x2 = view1[(i+1)*perp:len(view1)]
train_y2 = labels[(i+1)*perp:len(view1)]
train_x = numpy.concatenate((train_x1,train_x2))
train_y = numpy.concatenate((train_y1,train_y2))
va, ta = svm_classifier(train_x, train_y, test_x, test_y, test_x, test_y)
acc += ta
print acc/5
print "view2 to view1"


acc = 0
for i in range(0,5):
test_x = view1[i*perp:(i+1)*perp]
test_y = labels[i*perp:(i+1)*perp]
if i==0:
train_x = view2[perp:len(view1)]
train_y = labels[perp:len(view1)]
elif i==4:
train_x = view2[0:4*perp]
train_y = labels[0:4*perp]
else:
train_x1 = view2[0:i*perp]
train_y1 = labels[0:i*perp]
train_x2 = view2[(i+1)*perp:len(view1)]
train_y2 = labels[(i+1)*perp:len(view1)]
train_x = numpy.concatenate((train_x1,train_x2))
train_y = numpy.concatenate((train_y1,train_y2))
va, ta = svm_classifier(train_x, train_y, test_x, test_y, test_x, test_y)
acc += ta
print acc/5

您可能感兴趣的与本文相关的镜像

Kotaemon

Kotaemon

AI应用

Kotaemon 是由Cinnamon 开发的开源项目,是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline

在机器学习中,十折交叉验证(10-fold cross-validation)是一种广泛使用的评估方法。它将数据集随机划分为10个子集(称为“折”或“folds”),然后依次使用其中的1份作为测试集,其余9份作为训练集。通过重复这一过程10次,并综合所有结果,可以更稳定地评估模型性能。 以下是一个使用 Python 的 `scikit-learn` 库实现十折交叉验证代码示例: ### 使用 `scikit-learn` 实现十折交叉验证 ```python from sklearn.model_selection import KFold, cross_val_score from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris from sklearn.preprocessing import StandardScaler import numpy as np # 加载数据集(以Iris数据集为例) data = load_iris() X = data.data y = data.target # 数据预处理:标准化特征 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 初始化10折交叉验证 kf = KFold(n_splits=10, shuffle=True, random_state=42) # 初始化分类器(以随机森林为例) model = RandomForestClassifier(n_estimators=100, random_state=42) # 使用cross_val_score进行评估(cv参数为KFold对象) scores = cross_val_score(model, X_scaled, y, cv=kf, scoring='accuracy') # 输出每次折叠的准确率及平均准确率 print("每次折叠的准确率:", scores) print("平均准确率: {:.4f}".format(np.mean(scores))) ``` ### 说明: - **`KFold`**:用于定义10折交叉验证的分割方式。设置 `shuffle=True` 可以在划分前打乱数据,避免因类别分布不均影响评估。 - **`cross_val_score`**:这是 scikit-learn 提供的一个函数,可直接执行交叉验证并返回每一轮的评分。 - **`RandomForestClassifier`**:这里选择的是随机森林算法,属于集成学习方法的一种,具有较好的泛化能力[^2]。 - **`StandardScaler`**:对特征进行标准化处理,有助于某些模型(如支持向量机、KNN等)更好地收敛和表现。 ### 手动实现十折交叉验证的过程 如果希望手动控制训练与测试流程,也可以如下实现: ```python from sklearn.model_selection import KFold from sklearn.metrics import accuracy_score # 初始化模型 model = RandomForestClassifier(random_state=42) # 存储每轮的准确率 accuracies = [] # 开始10折交叉验证 for train_index, test_index in kf.split(X_scaled): X_train, X_test = X_scaled[train_index], X_scaled[test_index] y_train, y_test = y[train_index], y[test_index] # 训练模型 model.fit(X_train, y_train) # 预测与评估 y_pred = model.predict(X_test) acc = accuracy_score(y_test, y_pred) accuracies.append(acc) # 输出结果 print("手动实现的每次折叠准确率:", accuracies) print("手动实现的平均准确率: {:.4f}".format(np.mean(accuracies))) ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值