• PythonStudy2


    一、前言

    接之前的分析, 先不考虑数据集中数据的选择问题. 先把数据集的数据量扩大, 暂时不考虑不同地区采集的数据的区别.

    希望能够找到一些固有的联系吧.

    二、流程展示

    1. 获取所有文件

    创建一个文件列表用于存储需要访问的文件的文件名. 需要注意的是只对以 “.xlsx” 的表格文件名进行存储.

    先找到文件夹下所有文件和目录, 然后通过循环来判断是目录还是普通文件, 如果是目录就进行函数递归, 如果是文件就判断是否是表格文件, 若是就加入到文件名列表中. 具体代码如下所示.

    import os
    
    files = []
    
    def Getfile(path):
        files_list = os.listdir(path)
    
        for file_name in files_list:
            file_absolute_path = os.path.join(path,file_name)
            if os.path.isdir(file_absolute_path):
                Getfile(file_absolute_path)
            else:
                if file_absolute_path.rsplit('.')[-1] == 'xlsx':
                    files.append(file_absolute_path)
    
    Getfile(r"D:\Work\Data\welldata")
    
    print(files)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    运行截图

    2. 训练

    在之前代码的基础上进行修改, 因为在部分表中有一些数据缺失. 所以在这里对部分表进行处理, 缺失数据的表就不加入整体的数据集中.

    import pandas as pd
    
    feature = []
    label = []
    
    for file in files:
        useful_file = False
        
        if pd.read_excel(file).shape[1] == 28:
            useful_file = True
        else:
            useful_file = False
    
        if useful_file:
            # Get column 5,6,7,8,9,10,11,12,13,14,15,16,27 except head
            data = pd.read_excel(file, usecols=[5,6,7,8,9,10,11,12,13,14,15,16,27],names=None)
            df = data.values.tolist()
    
            for i in range(len(df)):
                feature.append(df[i][:-1])
    
                if df[i][-1] == "差气层":
                    label.append(0)
                elif df[i][-1] == "干层":
                    label.append(1)
                elif df[i][-1] == "气层":
                    label.append(2)
                else:
                    feature.pop()
        else:
            continue
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    from sklearn.model_selection import train_test_split
    
    feature_train_set,feature_test_set,label_train_set,label_test_set = train_test_split(feature,label)
    
    print("label_train_set:")
    print( label_train_set)
    
    print("label_train_set size:")
    print( len(label_train_set))
    
    print("label_test_set:")
    print( label_test_set)
    
    print("label_test_set size:")
    print( len(label_test_set))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行截图

    from sklearn.neighbors import KNeighborsClassifier
    
    sklearn_knn_clf = KNeighborsClassifier(n_neighbors=3)
    
    sklearn_knn_clf.fit(feature_train_set,label_train_set)
    
    sklearn_knn_clf.score(feature_test_set,label_test_set)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行截图

    这里可以看见识别率在 70% 左右. 无论是切换距离度量还是计算算法, 分类识别率总是在 70% 附近波动.

    更改训练集和测试集的比例也只能得到 70% 左右的正确分类率.

    那么想要更高的识别率就应该考虑对数据的选择问题, 这就牵涉到对研究事物属性的了解.

    三、总结

    其实如果是以目的驱动, 倒可以分析一下不同类别数据的统计学属性, 然后归纳出一个合理选择数据的规则.

    那么接下来的任务就是就是对数据进行分析, 然后再修改算法.

  • 相关阅读:
    我一个测试仔,做了20多天开发的感受......
    杂记:PostgreSQL 除法的坑
    Web基础与HTTP协议
    vim的基本操作
    Spark系列—Spark SQL执行过程解析
    python中urllib库的使用
    广和通入驻中国联通5G物联网OpenLab开放实验室,携手共赴5G扬帆新征程
    【Windbg】记一次线程卡主的问题
    RocketMQ入门之学习环境搭建
    点云处理开发测试题目 完整解决方案
  • 原文地址:https://blog.csdn.net/qq_44309220/article/details/125897974