机器学习分类模型训练:特征工程,模型选择,集成学习及交叉验证
{ 'title': '机器学习分类模型训练:特征工程,模型选择,集成学习及交叉验证', 'description': '本代码示例使用pandas, matplotlib, sklearn库进行机器学习分类模型训练,包含数据预处理、特征工程、模型选择、集成学习、交叉验证等步骤。可用于解决各种分类问题。', 'keywords': '机器学习, 分类, 特征工程, 模型选择, 集成学习, 交叉验证, pandas, matplotlib, sklearn, 决策树, 随机森林, AdaBoost, 贝叶斯, SVM', 'content': 'import pandas as pd\nimport matplotlib.pyplot as plt\nfrom sklearn.ensemble import RandomForestClassifier,AdaBoostClassifier\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import MinMaxScaler,Normalizer,MaxAbsScaler\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.metrics import f1_score, make_scorer\nfrom sklearn.naive_bayes import MultinomialNB\nfrom sklearn.model_selection import cross_val_score\n'''\n1、空值处理:均值填充,分析和其他列的相关性\n2、特征工程,特别是22列\n3、针对数据分布不均匀的情况: 加权重 砍掉第一两类\n4、模型的选择及参数优化:knn 决策树 逻辑回归 贝叶斯 SVM\n5、集成学习,随机森林 ababoots,GBDT\n6、交叉验证--------------不同的随机种子导致评分不稳定\n7、特征工程,特殊列的合并加工,特殊类分段\n8、深度模型\n'''\n\n#归一化/标准化\ndef data_scale(data):\n '''\n 数据归一化,可以采用:MinMaxScaler,Normalizer,MaxAbsScaler\n :param data:\n :return:\n '''\n\n scale = MinMaxScaler()\n #scale = Normalizer\n #scale = MaxAbsScaler\n data = scale.fit_transform(data)\n return data\n\n#降维\ndef dimension_reduce(data):\n '''\n 1、保留相关性大的维度\n 2、降维\n :param data:\n :return:\n '''\n corr = data.corr().loc[:, 'label']\n # print(corr)\n corr_bigger_001 = corr[(corr > 0.02) | (corr < -0.02)]\n # print(corr_bigger_001)\n\n return data\n\n#处理空值\ndef handle_na(data):\n '''\n 填充空值,ffill ,bfill,均值填充, 预测值填充,\n :param data:\n :return:\n '''\n\n # dropna前的行数 6296\n # dropna后的行数 0\n # print(pd.isnull(data).sum())\n # print('dropna前的行数',data.shape[0])\n # data = data.dropna()\n # print('dropna后的行数',data.shape[0])\n data = data.apply(lambda x: x.fillna(x.mean()))\n # print(pd.isnull(data).sum())\n\n #降维\n return data\n\n#预处理\ndef preprocessing(data):\n # 2.0 查看类型分布\n # print(data.loc[:, 'label'].value_counts())\n # plt.bar(range(0, 6), data.loc[:, 'label'].value_counts())\n # plt.show()\n # 2.1筛选列: 方案一筛选出相关性大的列\n data = dimension_reduce(data)\n # 2.2筛选列: 方案二PCA降维\n # 2.3空值处理方案一:扔掉空值,行不通\n # 2.4空值处理方案二:列均值填充\n data = handle_na(data)\n return data\n\n#选择模型\ndef select_model():\n # 5.选择模型\n # 决策树\n model = DecisionTreeClassifier(max_depth=5)\n # model = RandomForestClassifier(n_estimators=20,max_depth=5,criterion='entropy')\n # base_estimator =DecisionTreeClassifier(max_depth=5)\n # model = AdaBoostClassifier(n_estimators=100,base_estimator=base_estimator)\n # 贝叶斯\n # model = MultinomialNB()\n return model\n\n#评价方法\ndef get_score():\n # y_predict = model.predict(X_test)\n # score = f1_score(y_predict, y_test, average='macro')00\n # print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化','决策树','max_depth=5',score))\n # 预处理:均值填充空值_归一化 模型:决策树 参数:max_depth=5 得分:[0.84985113 0.45517241 0.49350649 0.82282282 0.8744186 0.93286219]\n # print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化', '决策树', 'max_depth=8', score))\n # 预处理:均值填充空值_归一化 模型:决策树 参数:max_depth=6 得分:[0.87522282 0.68199234 0.53604436 0.85386819 0.87557604 0.93286219]\n # 贝叶斯\n # print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化','多分类贝叶斯','',score))\n score = cross_val_score(model,X,Y,cv=10)\n print(sum(score)/len(score))\n\n\ndef train_model(data):\n # 1.加载数据\n data = pd.read_csv(data)\n # 2.探索数据:查看数据空值情况,数据分布,数据相关性,数据特殊特征\n data = preprocessing(data)\n # 3.数据预处理:空值处理,值映射(分段),归一化/标准化\n X = data.iloc[:, 0:-1]\n Y = data.iloc[:, -1]\n X = data_scale(X)\n # 4.分割测试集和训练集\n X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=42)\n # 5.选择模型\n model = select_model()\n # 6.训练模型\n model.fit(X_train, y_train)\n \n return model\n\n# Example usage:\nmodel = train_model('preprocess_train.csv')
原文地址: http://www.cveoy.top/t/topic/pFrU 著作权归作者所有。请勿转载和采集!