一、前言
接之前的分析, 先不考虑数据集中数据的选择问题. 先把数据集的数据量扩大,
暂时不考虑不同地区采集的数据的区别.
希望能够找到一些固有的联系吧.
二、流程展示
1. 获取所有文件
创建一个文件列表用于存储需要访问的文件的文件名. 需要注意的是只对以
".xlsx" 的表格文件名进行存储.
先找到文件夹下所有文件和目录, 然后通过循环来判断是目录还是普通文件,
如果是目录就进行函数递归, 如果是文件就判断是否是表格文件,
若是就加入到文件名列表中. 具体代码如下所示.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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)
运行截图
2. 训练
在之前代码的基础上进行修改, 因为在部分表中有一些数据缺失.
所以在这里对部分表进行处理, 缺失数据的表就不加入整体的数据集中.
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 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: 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 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 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)
运行截图
这里可以看见识别率在 70% 左右. 无论是切换距离度量还是计算算法,
分类识别率总是在 70% 附近波动.
更改训练集和测试集的比例也只能得到 70% 左右的正确分类率.
那么想要更高的识别率就应该考虑对数据的选择问题,
这就牵涉到对研究事物属性的了解.
三、总结
其实如果是以目的驱动, 倒可以分析一下不同类别数据的统计学属性,
然后归纳出一个合理选择数据的规则.
那么接下来的任务就是就是对数据进行分析, 然后再修改算法.