外贸网站建设开发,wordpress 只显示一个主题,wordpress wp-polls,lnmp搬家wordpress目录
矿物数据项目介绍#xff1a;
数据问题与处理方案#xff1a;
数据填充策略讨论#xff1a;
模型选择与任务类型#xff1a;
模型训练计划#xff1a;
一.数据集填充
1.读取数据
2.把标签转化为数值
3.把异常数据转化为nan
4.数据Z标准化
5.划分训练集测试…目录
矿物数据项目介绍
数据问题与处理方案
数据填充策略讨论
模型选择与任务类型
模型训练计划
一.数据集填充
1.读取数据
2.把标签转化为数值
3.把异常数据转化为nan
4.数据Z标准化
5.划分训练集测试集
6.创建一个新的fill_data.py文件用来存放填充训练数据和填充测试数据的方法
方法①删除有缺失值的行
方法②平均值填充处理测试集用训练集对应的平均值来填充
方法③中位数填充处理测试集用训练集对应的中位数来填充
方法④众数填充处理测试集用训练集对应的众数来填充
7.调用填充方法生成各自方法填充后的数据并保存到各自的excel文件中 矿物数据项目介绍
数据类型每行记录矿物微量元素氯、钠、镁等及类别A/B/C/D/E注意:发现类别 E 仅有一条数据无法用于模型训练所以我们应该删除该数据
任务目标构建分类模型通过微量元素自动识别矿物类型A/B/C/D 数据问题与处理方案
异常值如“7.97”应为7.97、“41.12”应为41.12等输入错误需手动修正。 缺失值填充 方法A按类别分组填充如A类用A类均值/众数/中位数。 方法B智能填充如逻辑回归、随机森林等算法预测缺失值。 特征工程特征数量较少约10个无需降维。
发现数据中存在隐藏空格如“思”列导致NaN检测失败需手动清理空格干扰。 其他问题斜杠如PH值列、单一类别数据列如“异”列需删除或特殊处理。
数据填充策略讨论
优先填充缺失值最少的列如F列仅缺3个值以增加完整数据量便于后续预测其他列如K列。 填充顺序从缺失少的列到缺失多的列以提高填充准确性。 强调利用已有数据包括部分缺失的数据进行训练而非仅依赖完全完整的数据。
模型选择与任务类型
确定当前任务为回归问题因预测目标Y为连续型数据。 可用回归模型包括SVRSVM变体、KNN、随机森林、线性回归等。
模型训练计划
多模型对比尝试逻辑回归、随机森林、支持向量机、XGBoost等调参后评估效果准确率、召回率等。 步骤 数据预处理清洗、填充缺失值。 分模型训练与调参交叉验证。 生成对比表格选择最优模型。 下面我们先用四种方法来填充数据分别是删除空白数据行处理平均值填充处理中位数填充处理众数填充处理
一.数据集填充
部分数据如下 1.读取数据
删除仅有一行数据的‘E’类数据并删除无关列‘序号’
import pandas as pd
datapd.read_excel(矿物数据.xlsx)
datadata[data[矿物类型]!E]
datadata.drop(序号,axis1)
x_wholedata.iloc[:,:-1]
y_wholedata.iloc[:,-1]
2.把标签转化为数值
把矿物类型ABCD类转化成机器可读的数字1234
labels_dict{A:1,B:2,C:3,D:4}
en_labels[labels_dict[label] for label in data[矿物类型]]
y_wholepd.Series(en_labels,name矿物类型)
3.把异常数据转化为nan
用pandas库将可以转化为数字类型的数据转化为数字不能转化的数据写为nan
# 异常数据转化为nan
for column_name in x_whole.columns:x_whole[column_name]pd.to_numeric(x_whole[column_name],errorscoerce)
4.数据Z标准化
#对数据Z标准化
from sklearn.preprocessing import StandardScaler
scalerStandardScaler()
X_whole_Zscaler.fit_transform(x_whole)
X_whole_Zpd.DataFrame(X_whole_Z,columnsx_whole.columns)
5.划分训练集测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_testtrain_test_split(X_whole_Z,y_whole)
6.创建一个新的fill_data.py文件用来存放填充训练数据和填充测试数据的方法
方法①删除有缺失值的行
import pandas as pd
#只保留完整数据集
def cca_train_fill(x_train,y_train):datapd.concat([x_train,y_train],axis1)datadata.reset_index(dropTrue)datadata.dropna()return data.iloc[:,:-1],data.iloc[:,-1]
def cca_test_fill(x_test,y_test):datapd.concat([x_test,y_test],axis1)datadata.reset_index(dropTrue)datadata.dropna()return data.iloc[:,:-1],data.iloc[:,-1]
方法②平均值填充处理测试集用训练集对应的平均值来填充
由于每一类的平均值都要分开处理所以我们先将每一类分别提取出来
def mean_train_fill(x_train,y_train):datapd.concat([x_train,y_train],axis1)datadata.reset_index(dropTrue)Adata[data[矿物类型]1]Bdata[data[矿物类型]2]Cdata[data[矿物类型]3]Ddata[data[矿物类型]4]Amean_method_train(A)Bmean_method_train(B)Cmean_method_train(C)Dmean_method_train(D)datapd.concat([A,B,C,D])return data.drop(矿物类型,axis1),data[矿物类型]
def mean_test_fill(x_train,y_train,x_test,y_test):data_train pd.concat([x_train, y_train], axis1)data_train data_train.reset_index(dropTrue)A_train data_train[data_train[矿物类型] 1]B_train data_train[data_train[矿物类型] 2]C_train data_train[data_train[矿物类型] 3]D_train data_train[data_train[矿物类型] 4]data_test pd.concat([x_test, y_test], axis1)data_test data_test.reset_index(dropTrue)A_test data_test[data_test[矿物类型] 1]B_test data_test[data_test[矿物类型] 2]C_test data_test[data_test[矿物类型] 3]D_test data_test[data_test[矿物类型] 4]A_testmean_method_test(A_train,A_test)B_test mean_method_test(B_train, B_test)C_test mean_method_test(C_train,C_test)D_test mean_method_test(D_train, D_test)data pd.concat([A_test, B_test, C_test, D_test])return data.drop(矿物类型, axis1), data[矿物类型]def mean_method_train(data):fill_valuesdata.mean()datadata.fillna(fill_values)return data
def mean_method_test(train_data,test_data):fill_valuestrain_data.mean()test_datatest_data.fillna(fill_values)return test_data
方法③中位数填充处理测试集用训练集对应的中位数来填充
def median_train_fill(x_train,y_train):data pd.concat([x_train, y_train], axis1)data data.reset_index(dropTrue)A data[data[矿物类型] 1]B data[data[矿物类型] 2]C data[data[矿物类型] 3]D data[data[矿物类型] 4]A median_method_train(A)B median_method_train(B)C median_method_train(C)D median_method_train(D)data pd.concat([A, B, C, D])return data.drop(矿物类型, axis1), data[矿物类型]
def median_test_fill(x_train,y_train,x_test,y_test):data_train pd.concat([x_train, y_train], axis1)data_train data_train.reset_index(dropTrue)A_train data_train[data_train[矿物类型] 1]B_train data_train[data_train[矿物类型] 2]C_train data_train[data_train[矿物类型] 3]D_train data_train[data_train[矿物类型] 4]data_test pd.concat([x_test, y_test], axis1)data_test data_test.reset_index(dropTrue)A_test data_test[data_test[矿物类型] 1]B_test data_test[data_test[矿物类型] 2]C_test data_test[data_test[矿物类型] 3]D_test data_test[data_test[矿物类型] 4]A_testmedian_method_test(A_train,A_test)B_test median_method_test(B_train, B_test)C_test median_method_test(C_train,C_test)D_test median_method_test(D_train, D_test)data pd.concat([A_test, B_test, C_test, D_test])return data.drop(矿物类型, axis1), data[矿物类型]
def median_method_train(data):fill_values data.median()data data.fillna(fill_values)return data
def median_method_test(train_data,test_data):fill_valuestrain_data.median()test_datatest_data.fillna(fill_values)return test_data
方法④众数填充处理测试集用训练集对应的众数来填充
def mode_train_fill(x_train,y_train): data pd.concat([x_train, y_train], axis1)data data.reset_index(dropTrue)A data[data[矿物类型] 1]B data[data[矿物类型] 2]C data[data[矿物类型] 3]D data[data[矿物类型] 4]A mode_method_train(A)B mode_method_train(B)C mode_method_train(C)D mode_method_train(D)data pd.concat([A, B, C, D])return data.drop(矿物类型, axis1), data[矿物类型]
def mode_test_fill(x_train,y_train,x_test,y_test):data_train pd.concat([x_train, y_train], axis1)data_train data_train.reset_index(dropTrue)A_train data_train[data_train[矿物类型] 1]B_train data_train[data_train[矿物类型] 2]C_train data_train[data_train[矿物类型] 3]D_train data_train[data_train[矿物类型] 4]data_test pd.concat([x_test, y_test], axis1)data_test data_test.reset_index(dropTrue)A_test data_test[data_test[矿物类型] 1]B_test data_test[data_test[矿物类型] 2]C_test data_test[data_test[矿物类型] 3]D_test data_test[data_test[矿物类型] 4]A_testmode_method_test(A_train,A_test)B_test mode_method_test(B_train, B_test)C_test mode_method_test(C_train,C_test)D_test mode_method_test(D_train, D_test)data pd.concat([A_test, B_test, C_test, D_test])return data.drop(矿物类型, axis1), data[矿物类型]
def mode_method_train(data):fill_values data.apply(lambda x: x.mode().iloc[0] if len(x.mode())0 else None)data data.fillna(fill_values)return data
def mode_method_test(train_data,test_data):fill_valuestrain_data.apply(lambda x: x.mode().iloc[0] if len(x.mode())0 else None)test_datatest_data.fillna(fill_values)return test_data7.调用填充方法生成各自方法填充后的数据并保存到各自的excel文件中
由于训练集样本不平衡我们采用smote过采样来平衡数据
import fill_data
#1.删除空白数据行处理
# x_train_fill,y_train_fillfill_data.cca_train_fill(x_train,y_train)
# x_test_fill,y_test_fillfill_data.cca_train_fill(x_test,y_test)
#2.平均值填充处理
# x_train_fill,y_train_fillfill_data.mean_train_fill(x_train,y_train)
# x_test_fill,y_test_fillfill_data.mean_test_fill(x_train_fill,y_train_fill,x_test,y_test)
#中位数填充处理
# x_train_fill,y_train_fillfill_data.median_train_fill(x_train,y_train)
# x_test_fill,y_test_fillfill_data.median_test_fill(x_train_fill,y_train_fill,x_test,y_test)
# 众数填充处理
x_train_fill,y_train_fillfill_data.mode_train_fill(x_train,y_train)
x_test_fill,y_test_fillfill_data.mode_test_fill(x_train_fill,y_train_fill,x_test,y_test)
#smote拟合数据
from imblearn.over_sampling import SMOTE
oversampleSMOTE(k_neighbors1,random_state42)#保证数据拟合效果随机种子
x_train_fill,y_train_filloversample.fit_resample(x_train_fill,y_train_fill)#数据存入excel
train_datapd.concat([y_train_fill,x_train_fill],axis1)
train_data.to_excel(训练集[众数填充].xlsx,indexFalse)
test_datapd.concat([y_test_fill,x_test_fill],axis1)