机器学习模型训练:数据预处理、特征工程、模型选择与评估
{ 'title': '机器学习模型训练:数据预处理、特征工程、模型选择与评估', 'description': '本代码演示了机器学习模型训练的完整流程,包括数据预处理、特征工程、模型选择和评估。使用 pandas 和 scikit-learn 库,涵盖了数据清洗、特征选择、数据归一化、模型训练和性能评估等步骤。', 'keywords': '机器学习, 模型训练, 数据预处理, 特征工程, 模型选择, 评估, pandas, scikit-learn, 决策树, 随机森林, 交叉验证, F1 分数', 'content': 'import\u0020pandas\u0020as\u0020pd\nimport\u0020matplotlib.pyplot\u0020as\u0020plt\nfrom\u0020sklearn.ensemble\u0020import\u0020RandomForestClassifier,AdaBoostClassifier\nfrom\u0020sklearn.model_selection\u0020import\u0020train_test_split\nfrom\u0020sklearn.preprocessing\u0020import\u0020MinMaxScaler,Normalizer,MaxAbsScaler\nfrom\u0020sklearn.tree\u0020import\u0020DecisionTreeClassifier\nfrom\u0020sklearn.metrics\u0020import\u0020f1_score, make_scorer\nfrom\u0020sklearn.naive_bayes\u0020import\u0020MultinomialNB\nfrom\u0020sklearn.model_selection\u0020import\u0020cross_val_score\n'''\n1、空值处理:均值填充,分析和其他列的相关性\n2、特征工程,特别是22列\n3、针对数据分布不均匀的情况: 加权重 砍掉第一两类\n4、模型的选择及参数优化:knn 决策树 逻辑回归 贝叶斯 SVM\n5、集成学习,随机森林 ababoots,GBDT\n6、交叉验证--------------不同的随机种子导致评分不稳定\n7、特征工程,特殊列的合并加工,特殊类分段\n8、深度模型\n'''\n\n#归一化/标准化\ndef\u0020data_scale(data):\n\t'''\n 数据归一化,可以采用:MinMaxScaler,Normalizer,MaxAbsScaler\n :param\u0020data:\n :return:\n '''\n\n scale\u0020=\u0020MinMaxScaler()\n #scale\u0020=\u0020Normalizer\n #scale\u0020=\u0020MaxAbsScaler\n data\u0020=\u0020scale.fit_transform(data)\n return\u0020data\n\n#降维\ndef\u0020dimension_reduce(data):\n\t'''\n 1、保留相关性大的维度\n 2、降维\n :param\u0020data:\n :return:\n '''\n corr\u0020=\u0020data.corr().loc[:,\u0020'label']\n #\u0020print(corr)\n corr_bigger_001\u0020=\u0020corr[(corr\u0020>\u00200.02)\u0020|\u0020(corr\u0020<\u0020-0.02)]\n #\u0020print(corr_bigger_001)\n\n return\u0020data\n\n#处理空值\ndef\u0020handle_na(data):\n\t'''\n 填充空值,ffill ,bfill,均值填充, 预测值填充,\n :param\u0020data:\n :return:\n '''\n\n #\u0020dropna前的行数\u00206296\n #\u0020dropna后的行数\u00200\n #\u0020print(pd.isnull(data).sum())\n #\u0020print('dropna前的行数',data.shape[0])\n #\u0020data\u0020=\u0020data.dropna()\n #\u0020print('dropna后的行数',data.shape[0])\n data\u0020=\u0020data.apply(lambda\u0020x:\u0020x.fillna(x.mean()))\n #\u0020print(pd.isnull(data).sum())\n\n #降维\n return\u0020data\n\n#预处理\ndef\u0020preprocessing(data):\n #\u00202.0\u0020查看类型分布\n #\u0020print(data.loc[:,\u0020'label'].value_counts())\n #\u0020plt.bar(range(0, 6), data.loc[:, 'label'].value_counts())\n #\u0020plt.show()\n #\u00202.1筛选列: 方案一筛选出相关性大的列\n data\u0020=\u0020dimension_reduce(data)\n #\u00202.2筛选列: 方案二PCA降维\n #\u00202.3空值处理方案一:扔掉空值,行不通\n #\u00202.4空值处理方案二:列均值填充\n data\u0020=\u0020handle_na(data)\n return\u0020data\n\n#选择模型\ndef\u0020select_model():\n #\u00205.选择模型\n #\u0020决策树\n model\u0020=\u0020DecisionTreeClassifier(max_depth=5)\n #\u0020model\u0020=\u0020RandomForestClassifier(n_estimators=20,max_depth=5,criterion='entropy')\n #\u0020base_estimator\u0020=DecisionTreeClassifier(max_depth=5)\n #\u0020model\u0020=\u0020AdaBoostClassifier(n_estimators=100,base_estimator=base_estimator)\n #\u0020贝叶斯\n #\u0020model\u0020=\u0020MultinomialNB()\n return\u0020model\n\n#评价方法\ndef\u0020get_score():\n #\u0020y_predict\u0020=\u0020model.predict(X_test)\n #\u0020score\u0020=\u0020f1_score(y_predict, y_test, average='macro')00\n #\u0020print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化','决策树','max_depth=5',score))\n #\u0020预处理:均值填充空值_归一化 模型:决策树 参数:max_depth=5 得分:[0.84985113 0.45517241 0.49350649 0.82282282 0.8744186 0.93286219]\n #\u0020print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化', '决策树', 'max_depth=8', score))\n #\u0020预处理:均值填充空值_归一化 模型:决策树 参数:max_depth=6 得分:[0.87522282 0.68199234 0.53604436 0.85386819 0.87557604 0.93286219]\n #\u0020贝叶斯\n #\u0020print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化','多分类贝叶斯','',score))\n score\u0020=\u0020cross_val_score(model,X,Y,cv=10)\n print(sum(score)/len(score))\n\n\nif\u0020__name__\u0020==\u0020'main':\n #\u00201.加载数据\n data\u0020=\u0020pd.read_csv('preprocess_train.csv')\n #\u00202.探索数据:查看数据空值情况,数据分布,数据相关性,数据特殊特征\n data\u0020=\u0020preprocessing(data)\n print(data)\n #\u00203.数据预处理:空值处理,值映射(分段),归一化/标准化\n X\u0020=\u0020data.iloc[:,\u00200:-1]\n Y\u0020=\u0020data.iloc[:,\u0020-1]\n X\u0020=\u0020data_scale(X)\n #\u00204.分割测试集和训练集\n X_train, X_test, y_train, y_test\u0020=\u0020train_test_split(X, Y, test_size=0.33, random_state=42)\n #\u00205.选择模型\n model\u0020=\u0020select_model()\n #\u00206.训练模型\n model.fit(X_train, y_train)\n #\u00207.评价模型:要求用F1\n get_score()\n
原文地址: http://www.cveoy.top/t/topic/pFrQ 著作权归作者所有。请勿转载和采集!