首页 > 编程语言 >数据分类实验的python程序

数据分类实验的python程序

时间:2023-08-12 12:33:05浏览次数:43  
标签:python accuracies 分类 程序 results Experiment file import sklearn

数据分类实验的python程序

实验设置要求:

  • 数据集:共12个,从本地文件夹中包含若干个以xlsx为后缀的Excel文件,每个文件中有一个小规模数据,有表头,最后一列是分类的类别class,其他列是特征,数值的。
  • 实验方法:XGBoost、AdaBoost、SVM (采用rbf核)、Neural Network分类器
  • 输出:分类准确率,即十折交叉验证的准确率均值和方差,并重复5次实验,不同数据的实验结果分别保存至各自的一个csv文件。
  • 其他要求:SVC增加rbf参数设置,默认为0.001、MLPClassifier为1层隐层神经网络,隐层节点为100. XGBoost和AdaBoost弱分类器设置。 cross_val_score增加数据标准化和n_jobs设置。由于数据的类别可能是非连续的字符形式,增加class的映射

Excel中的数据形式如下:

 

python程序如下:

import os
import pandas as pd
import numpy as np
from sklearn.model_selection import KFold, cross_val_score
from sklearn.svm import SVC
from sklearn.ensemble import AdaBoostClassifier
from sklearn.neural_network import MLPClassifier
import xgboost as xgb
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.pipeline import Pipeline
from concurrent.futures import ThreadPoolExecutor

# 1. 读取文件夹中的所有.xlsx文件
data_folder = "./分类数据集"  
file_list = [f for f in os.listdir(data_folder) if f.endswith('.xlsx')]
result_folder = "./results"

# 定义分类器
classifiers = {
    "XGBoost": xgb.XGBClassifier(),
    "AdaBoost": AdaBoostClassifier(n_estimators=50), #https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html
    "SVM_rbf": SVC(C=1.0, kernel="rbf", gamma='scale'),  #gamma默认为1 / (n_features * X.var()),
                                                           #可以根据数据集进行调整
    "Neural_Network": MLPClassifier(hidden_layer_sizes=(100), max_iter=1000)
}

# # 对每一个文件进行分类实验
# def process_file(file):

# 对每一个文件进行分类实验
for file in file_list:    
    df = pd.read_excel(os.path.join(data_folder, file))
    X = df.iloc[:, :-1].values
    y = df.iloc[:, -1].values
    
    # 类别映射
    le = LabelEncoder()
    y = le.fit_transform(y)

    results = {
        "Classifier": [],
        "Experiment 1": [],
        "Experiment 2": [],
        "Experiment 3": [],
        "Experiment 4": [],
        "Experiment 5": [],
        "Mean Accuracy": [],
        "Accuracy Variance": []
    }
    
    # 使用四种分类器
    for clf_name, clf in classifiers.items():
        all_accuracies = []
        
        # 使用标准化和分类器创建流水线
        pipeline = Pipeline([
            ('scaler', StandardScaler()),
            ('classifier', clf)
        ])

        # 重复5次实验
        for exp_num in range(1, 6):
            print(clf_name, exp_num)
            kf = KFold(n_splits=10, shuffle=True, random_state=None)
            accuracies = cross_val_score(pipeline, X, y, cv=kf,n_jobs=16)
            results[f"Experiment {exp_num}"].append(np.mean(accuracies))
            all_accuracies.extend(accuracies)
        
        results["Classifier"].append(clf_name)
        results["Mean Accuracy"].append(np.mean(all_accuracies))
        results["Accuracy Variance"].append(np.var(all_accuracies))
    
    # 保存到.csv文件
    result_df = pd.DataFrame(results)
    result_df.to_csv(os.path.join(result_folder, f"results_{file.replace('.xlsx', '.csv')}"), index=False)

# # 使用多线程处理文件
# with ThreadPoolExecutor() as executor:
#     executor.map(process_file, file_list)

print("Experiments completed!")

  

 

标签:python,accuracies,分类,程序,results,Experiment,file,import,sklearn
From: https://www.cnblogs.com/huadongw/p/17624646.html

相关文章

  • 婚恋交友h5多端小程序开源版开发
    婚恋交友h5多端小程序开源版开发以下是婚恋交友H5多端小程序的功能列表:1.用户注册和登录:用户可以通过手机号码或第三方账号注册和登录。2.个人信息填写:用户可以填写个人基本信息,包括姓名、性别、年龄、身高、体重、学历、职业等。3.个人相册:用户可以上传个人照片,并设置照片的可......
  • 3.0 Python 迭代器与生成器
    当我们需要处理一个大量的数据集合时,一次性将其全部读入内存并处理可能会导致内存溢出。此时,我们可以采用迭代器Iterator和生成器Generator的方法,逐个地处理数据,从而避免内存溢出的问题。迭代器是一个可以逐个访问元素的对象,它实现了python的迭代协议,即实现了__iter__()和__next__......
  • Python 访问控制
    Python访问控制Java中采用public,protected,private等修饰符来控制访问,Python则采用命令约定来控制访问,一个下划线_开头表示保护方法,两个下划线__开头表示私有方法Python使用@property和propertysetter来控制属性的访问importpytestclassTask:def__in......
  • 某公司笔试题 - 合并表记录(附python代码)
    #数据表记录包含表索引index和value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出#提示0<=index<=111111111<=value<=100000times=int(input("请输入字典中键值对的个数:"))#定义一个字典dictsdicts......
  • 程序员 代码
    程序猿 攻城狮coding  人傻钱多死得早 送外卖送菜送货  开滴滴 代码改变世界信息成就人生技术改变世界你只看到我在不停地敲代码,却没看到我编程的热情。你有你的灯红酒绿,我有我的代码编辑器。你否定我的宅,我决定我的未来。你可以轻视我的存在,我会用代码证明这......
  • PYTHON 读写CSV
    importcsvdata=[]file1=open("xx2.csv",mode="w")writer=csv.writer(file1)withopen("sc.csv",'r',encoding='utf-8')asfile:reader=csv.DictReader(file)ab=0forrowinreader:data=[]......
  • python 判空 is None 和 if not None 对比
    Thanksforcomments.Ihavetestedtheperformbetweenthese:importtimeitdefusing_is_none(variable):returnvariableisNonedefusing_if_not_none(variable):returnnotvariablevariable=Noneprint("Using'isNone':",......
  • a、IPython
    IPython:超越PythonPython有很多开发环境可供选择,IPython(interactivePython的简称,即交互式Python)由FernandoPerez作为一个增强的Python解释器于2001年启动,并由此发展为一个项目。用Perez的原话来说,该项目致力于提供“科学计算的全生命周期开发工具”。如果将Pytho......
  • Anaconda创建python新环境
    Anaconda创建python新环境1、创建python环境方法一:condacreate-npython3.6(环境名字)python=3.7(版本号)方法二:a.从“开始>anaconda>anacondanavigator”,打开如下配置页面:b.在上述页面左侧列表中选择“Environments>Create”c.打开如下页面:重新命名文件夹名,并选择一......
  • 你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图
    目录说明设置提醒时间,及休息时间久坐提醒倒计时休息提醒倒计时休息到计时代码说明主窗体设置工作到计时休息倒计时源码高清图久坐提醒桌面小程序:干这行职业病比较多,之前用爱丽(即:玻璃酸钠滴眼液),用的时候挺舒服,缓解吧,不过治标不治本。注意休息,加强锻炼非常有必要,每工作1小时,休息10分......