import\u0020pandas\u0020as\u0020pd import\u0020matplotlib.pyplot\u0020as\u0020plt from\u0020sklearn.ensemble\u0020import\u0020RandomForestClassifier,AdaBoostClassifier from\u0020sklearn.model_selection\u0020import\u0020train_test_split from\u0020sklearn.preprocessing\u0020import\u0020MinMaxScaler,Normalizer,MaxAbsScaler from\u0020sklearn.tree\u0020import\u0020DecisionTreeClassifier from\u0020sklearn.metrics\u0020import\u0020f1_score, make_scorer from\u0020sklearn.naive_bayes\u0020import\u0020MultinomialNB from\u0020sklearn.model_selection\u0020import\u0020cross_val_score ''' 1\u002c空值处理:均值填充\u002c分析和其他列的相关性 2\u002c特征工程\u002c特别是22列 3\u002c针对数据分布不均匀的情况: 加权重 砍掉第一两类 4\u002c模型的选择及参数优化:knn 决策树 逻辑回归 贝叶斯 SVM 5\u002c集成学习\u002c随机森林 ababoots,GBDT 6\u002c交叉验证--------------不同的随机种子导致评分不稳定 7\u002c特征工程\u002c特殊列的合并加工\u002c特殊类分段 8\u002c深度模型 '''

#归一化/标准化 def\u0020data_scale(data): \u0020\u0020''' \u0020\u0020数据归一化\u002c可以采用:MinMaxScaler,Normalizer,MaxAbsScaler \u0020\u0020:param\u0020data: \u0020\u0020:return: \u0020\u0020'''

\u0020\u0020scale\u0020=\u0020MinMaxScaler() \u0020\u0020#scale\u0020=\u0020Normalizer \u0020\u0020#scale\u0020=\u0020MaxAbsScaler \u0020\u0020data\u0020=\u0020scale.fit_transform(data) \u0020\u0020return\u0020data

#降维 def\u0020dimension_reduce(data): \u0020\u0020''' \u0020\u00201\u002c保留相关性大的维度 \u0020\u00202\u002c降维 \u0020\u0020:param\u0020data: \u0020\u0020:return: \u0020\u0020''' \u0020\u0020corr\u0020=\u0020data.corr().loc[:,\u0020'label'] \u0020\u0020#\u0020print(corr) \u0020\u0020corr_bigger_001\u0020=\u0020corr[(corr\u0020>\u00200.02)\u0020|\u0020(corr\u0020<\u0020-0.02)] \u0020\u0020#\u0020print(corr_bigger_001)

\u0020\u0020return\u0020data

#处理空值 def\u0020handle_na(data): \u0020\u0020''' \u0020\u0020填充空值\u002cffill ,bfill,均值填充\u002c 预测值填充\u002c \u0020\u0020:param\u0020data: \u0020\u0020:return: \u0020\u0020'''

\u0020\u0020#\u0020dropna前的行数\u00206296 \u0020\u0020#\u0020dropna后的行数\u00200 \u0020\u0020#\u0020print(pd.isnull(data).sum()) \u0020\u0020#\u0020print('dropna前的行数',data.shape[0]) \u0020\u0020#\u0020data\u0020=\u0020data.dropna() \u0020\u0020#\u0020print('dropna后的行数',data.shape[0]) \u0020\u0020data\u0020=\u0020data.apply(lambda\u0020x:\u0020x.fillna(x.mean())) \u0020\u0020#\u0020print(pd.isnull(data).sum())

\u0020\u0020#降维 \u0020\u0020return\u0020data

#预处理 def\u0020preprocessing(data): \u0020\u0020#\u00202.0\u0020查看类型分布 \u0020\u0020#\u0020print(data.loc[:,\u0020'label'].value_counts()) \u0020\u0020#\u0020plt.bar(range(0,\u00206),\u0020data.loc[:,\u0020'label'].value_counts()) \u0020\u0020#\u0020plt.show() \u0020\u0020#\u00202.1筛选列: 方案一筛选出相关性大的列 \u0020\u0020data\u0020=\u0020dimension_reduce(data) \u0020\u0020#\u00202.2筛选列: 方案二PCA降维 \u0020\u0020#\u00202.3空值处理方案一:扔掉空值,行不通 \u0020\u0020#\u00202.4空值处理方案二:列均值填充 \u0020\u0020data\u0020=\u0020handle_na(data) \u0020\u0020return\u0020data

#选择模型 def\u0020select_model(): \u0020\u0020#\u00205.选择模型 \u0020\u0020#\u0020决策树 \u0020\u0020model\u0020=\u0020DecisionTreeClassifier(max_depth=5) \u0020\u0020#\u0020model\u0020=\u0020RandomForestClassifier(n_estimators=20,max_depth=5,criterion='entropy') \u0020\u0020#\u0020base_estimator\u0020=DecisionTreeClassifier(max_depth=5) \u0020\u0020#\u0020model\u0020=\u0020AdaBoostClassifier(n_estimators=100,base_estimator=base_estimator) \u0020\u0020#\u0020贝叶斯 \u0020\u0020#\u0020model\u0020=\u0020MultinomialNB() \u0020\u0020return\u0020model

#评价方法 def\u0020get_score(): \u0020\u0020#\u0020y_predict\u0020=\u0020model.predict(X_test) \u0020\u0020#\u0020score\u0020=\u0020f1_score(y_predict,\u0020y_test,\u0020average='macro')00 \u0020\u0020#\u0020print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化','决策树','max_depth=5',score)) \u0020\u0020#\u0020预处理:均值填充空值_归一化 模型:决策树 参数:max_depth=5 得分:[0.84985113 0.45517241 0.49350649 0.82282282 0.8744186 0.93286219] \u0020\u0020#\u0020print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化', '决策树', 'max_depth=8', score)) \u0020\u0020#\u0020预处理:均值填充空值_归一化 模型:决策树 参数:max_depth=6 得分:[0.87522282 0.68199234 0.53604436 0.85386819 0.87557604 0.93286219] \u0020\u0020#\u0020贝叶斯 \u0020\u0020#\u0020print('预处理:{} 模型:{} 参数:{} 得分:{}'.format('均值填充空值_归一化','多分类贝叶斯','',score)) \u0020\u0020score\u0020=\u0020cross_val_score(model,X,Y,cv=10) \u0020\u0020print(sum(score)/len(score))

if\u0020__name__\u0020==\u0020'main': \u0020\u0020#\u00201.加载数据 \u0020\u0020data\u0020=\u0020pd.read_csv('preprocess_train.csv') \u0020\u0020#\u00202.探索数据:查看数据空值情况,数据分布,数据相关性,数据特殊特征 \u0020\u0020data\u0020=\u0020preprocessing(data) \u0020\u0020print(data) \u0020\u0020#\u00203.数据预处理:空值处理,值映射(分段),归一化/标准化 \u0020\u0020X\u0020=\u0020data.iloc[:,\u00200:-1] \u0020\u0020Y\u0020=\u0020data.iloc[:,\u0020-1] \u0020\u0020X\u0020=\u0020data_scale(X) \u0020\u0020#\u00204.分割测试集和训练集 \u0020\u0020X_train, X_test, y_train, y_test\u0020=\u0020train_test_split(X, Y, test_size=0.33, random_state=42) \u0020\u0020#\u00205.选择模型 \u0020\u0020model\u0020=\u0020select_model() \u0020\u0020#\u00206.训练模型 \u0020\u0020model.fit(X_train, y_train) \u0020\u0020#\u00207.评价模型:要求用F1 \u0020\u0020get_score()


原文地址: https://www.cveoy.top/t/topic/pFsh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录