当前位置: 首页 > news >正文

刘金鹏做网站mip网站建设公司

刘金鹏做网站,mip网站建设公司,WordPress按评论时间排序,app 快速开发平台模型预测 一、导入关键包二、如何载入、分析和保存文件三、修改缺失值3.1 众数3.2 平均值3.3 中位数3.4 0填充 四、修改异常值4.1 删除4.2 替换 五、数据绘图分析5.1 饼状图5.1.1 绘制某一特征的数值情况#xff08;二分类#xff09; 5.2 柱状图5.2.1 单特征与目标特征之间的… 模型预测 一、导入关键包二、如何载入、分析和保存文件三、修改缺失值3.1 众数3.2 平均值3.3 中位数3.4 0填充 四、修改异常值4.1 删除4.2 替换 五、数据绘图分析5.1 饼状图5.1.1 绘制某一特征的数值情况二分类 5.2 柱状图5.2.1 单特征与目标特征之间的图像5.2.2 多特征与目标特征之间的图像 5.3 折线图5.3.1 多个特征之间的关系图 5.4 散点图 六、特征选择6.1、相关性分析6.1.1 皮尔逊相关系数6.1.2 斯皮尔曼相关系数6.1.3 肯德尔相关系数6.1.4 计算热力图 6.2 主成分分析6.3 线性判别分析 七、数据归一化八、模型搭建九、模型训练十、评估模型十一、预测模型 一、导入关键包 # 导入数据分析需要的包 import pandas as pd import numpy as np # 可视化包 import seaborn as sns sns.set(stylewhitegrid) import matplotlib.pyplot as plt %matplotlib inline # 忽略警告信息 import warnings warnings.filterwarnings(ignore) # 导入数据分析需要的包 import pandas as pd import numpy as np from datetime import datetime# 构建多个分类器 from sklearn.ensemble import RandomForestClassifier # 随机森林 from sklearn.svm import SVC, LinearSVC # 支持向量机 from sklearn.linear_model import LogisticRegression # 逻辑回归 from sklearn.neighbors import KNeighborsClassifier # KNN算法 from sklearn.naive_bayes import GaussianNB # 朴素贝叶斯 from sklearn.tree import DecisionTreeClassifier # 决策树分类器 from xgboost import XGBClassifier from sklearn.ensemble import AdaBoostClassifier from sklearn.ensemble import GradientBoostingClassifier from sklearn.metrics import precision_score, recall_score, f1_score from sklearn.metrics import confusion_matrix from sklearn.model_selection import GridSearchCV # 网格搜索 np.set_printoptions(suppressTrue)# 显示中文 plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False二、如何载入、分析和保存文件 dfpd.read_csv(data/dataset.csv)df.head(5)# 查看前几列数据 df.tail() # 返回CSV文件的最后几行数据。 df.info() # 显示CSV文件的基本信息包括数据类型、列数、行数、缺失值等。 df.describe()# 对CSV文件的数值型数据进行统计描述包括计数、均值、标准差、最小值、最大值等。 df.shape()# 返回CSV文件的行数和列数。 df[IS_WX].unique() # 返回CSV文件中某一列的唯一值。 df.value_counts()# 计算CSV文件中某一列中每个值的出现次数。 df.groupby(col1)[col2] # 按照某一列的值进行分组并对其他列进行聚合操作如求和、计数、平均值等。 df.sort_values(bycol1) # 按照某一列的值进行排序。 df.pivot_table(valuesC, indexA, columnsB, aggfuncmean)# 创建透视表根据指定的行和列对数据进行汇总和分析。# 保存处理后的数据集 df.to_csv(data/Telecom_data_flag.csv)三、修改缺失值 3.1 众数 # 对每一列属性采用相应的缺失值处理方式,通过分析发现这类数据都可以采用众数的方式解决 df.isnull().sum() modes df.mode().iloc[0] print(modes) df df.fillna(modes) print(df.isnull().sum())3.2 平均值 mean_values df.mean() print(mean_values) df df.fillna(mean_values) print(df.isnull().sum())3.3 中位数 median_values df.median() print(median_values) df df.fillna(median_values) print(df.isnull().sum())3.4 0填充 df df.fillna(0) print(df.isnull().sum())四、修改异常值 4.1 删除 1.删除DataFrame表中全部为NaN的行 your_dataframe.dropna(axis0,howall) 2.删除DataFrame表中全部为NaN的列 your_dataframe.dropna(axis1,howall) 3.删除表中含有任何NaN的行 your_dataframe.dropna(axis0,howany) 4.删除表中含有任何NaN的列 your_dataframe.dropna(axis1,howany)4.2 替换 这里的替换可以参考前文的中位数平均值众数0替换等。 replace_value 0.0# 这里设置 inplace 为 True能够直接把表中的 NaN 值替换掉your_dataframe.fillna(replace_value, inplaceTrue)# 如果不设置 inplace则这样写就行# new_dataframe your_dataframe.fillna(replace_value) 五、数据绘图分析 5.1 饼状图 5.1.1 绘制某一特征的数值情况二分类 # 查看总体客户流失情况 churnvalue df[LEAVE_FLAG].value_counts() labels df[LEAVE_FLAG].value_counts().index plt.pie(churnvalue,labels[未流失,流失],explode(0.1,0),autopct%.2f%%, shadowTrue,) plt.title(客户流失率比例,size24) plt.show() # 从饼形图中看出流失客户占总客户数的很小的比例流失率达3.58%5.2 柱状图 5.2.1 单特征与目标特征之间的图像 # 粘性/忠诚度分析 包括绑定银行卡张数 fig, axes plt.subplots(1, 1, figsize(12,12)) plt.subplot(1,1,1) # palette参数表示设置颜色 gendersns.countplot(xBANK_NUM,hueLEAVE_FLAG,datadf,palettePastel2) plt.xlabel(绑定银行卡张数,fontsize16) plt.title(LEAVE_FLAG by BANK_NUM,fontsize18) plt.ylabel(count,fontsize16) plt.tick_params(labelsize12) # 设置坐标轴字体大小 # 从此表可知对于没有绑定银行卡的用户流失情况会更大应该加强督促用户绑定银行卡# 查看正常用户与流失用户在上网流量上的差别 plt.figure(figsize(10,6)) g sns.FacetGrid(data df,hue LEAVE_FLAG, height4, aspect3) g.map(sns.distplot,BYTE_ALL,norm_histTrue) g.add_legend() plt.ylabel(density,fontsize16) plt.xlabel(BYTE_ALL,fontsize16) plt.xlim(0, 100) plt.tick_params(labelsize13) # 设置坐标轴字体大小 plt.tight_layout() plt.show() # 从上图看出上网流量少的用户流失率相对较高。5.2.2 多特征与目标特征之间的图像 这里绘制的多个二分类特征的情况是与目标特征之间的关系 # 粘性/忠诚度分析 包括是否捆绑微信、是否捆绑支付宝 # sns.countplot()函数绘制了是否使用支付宝IS_ZFB这一列的柱状图并根据LEAVE_FLAG是否离网进行了颜色分类。 fig, axes plt.subplots(1, 2, figsize(12,12)) plt.subplot(1,2,1) # palette参数表示设置颜色 partnersns.countplot(xIS_ZFB,hueLEAVE_FLAG,datadf,palettePastel2) plt.xlabel(是否使用支付宝1代表使用0代表使用) plt.title(LEAVE_FLAG by IS_ZFB,fontsize18) plt.ylabel(count,fontsize16) plt.tick_params(labelsize12) # 设置坐标轴字体大小plt.subplot(1,2,2) seniorcitizensns.countplot(xIS_WX,hueLEAVE_FLAG,datadf,palettePastel2) plt.xlabel(是否使用微信1代表使用0代表使用) plt.title(LEAVE_FLAG by IS_WX,fontsize18) plt.ylabel(count,fontsize16) plt.tick_params(labelsize12) # 设置坐标轴字体大小 # 从此表可知 支付宝绑定目前对于用户流失没有影响微信的绑定影响会稍微大点可能是微信用户用的较多# 异常性 根据用户流失情况来结合判定 covariables[CMPLNT_NUM, STOP_COUNT] fig,axesplt.subplots(1,2,figsize(20,12)) for i, item in enumerate(covariables):0,CMPLNT_NUM1,STOP_COUNTplt.subplot(1,2,(i1))axsns.countplot(xitem,hueLEAVE_FLAG,datadf,paletteSet2)plt.xlabel(str(item),fontsize16)plt.tick_params(labelsize14) # 设置坐标轴字体大小plt.title(LEAVE_FLAG by str(item),fontsize20)ii1 plt.tight_layout() plt.show() # 从此表可知 最近6个月累计投诉次数间接性的决定了用户的流失停机天数也和用户流失成正相关。5.3 折线图 5.3.1 多个特征之间的关系图 # 用户的成长性分析结合用户流失情况。 # 包括流量趋势、语音通话次数趋势、语音通话时长趋势、交往圈趋势 # 提取特征数据列 feature1 df[LIULIANG_B] feature2 df[YUYING_COUNT] feature3 df[YUYING_B] feature4 df[JIAOWANG_B]# 绘制折线图 plt.plot(feature1, labelLIULIANG_B) plt.plot(feature2, labelYUYING_COUNT) plt.plot(feature3, labelYUYING_B) plt.plot(feature4, labelJIAOWANG_B)# 添加标题和标签 plt.title(Trend of User growth) plt.xlabel(Index) plt.ylabel(Value)# 添加图例 plt.legend()# 显示图表 plt.show() # 从此图可以发现针对流量趋势来说用户的波动是最大的。5.4 散点图 df.plot(xSERV_ID_COUNT, yCDR_NUM, kindscatter, cred) plt.show()这段代码的作用是绘制一个以SERV_ID_COUNT为横轴CDR_NUM为纵轴的散点图并将散点的颜色设置为红色。通过这个散点图可以直观地观察到SERV_ID_COUNT和CDR_NUM之间的关系。 六、特征选择 6.1、相关性分析 6.1.1 皮尔逊相关系数 plt.figure(figsize(16,8)) df.corr()[LEAVE_FLAG].sort_values(ascending False).plot(kindbar) plt.tick_params(labelsize14) # 设置坐标轴字体大小 plt.xticks(rotation45) # 设置x轴文字转向 plt.title(Correlations between LEAVE_FLAG and variables,fontsize20) plt.show() # 从图可以直观看出YUYING_COUNT 、YUYING_B、IS_ZFB、BALANCE、JIAOWANG_B、IS_WX这六个变量与LEAVE_FLAG目标变量相关性最弱。6.1.2 斯皮尔曼相关系数 plt.figure(figsize(16,8)) df.corr(methodspearman)[LEAVE_FLAG].sort_values(ascending False).plot(kindbar) plt.tick_params(labelsize14) # 设置坐标轴字体大小 plt.xticks(rotation45) # 设置x轴文字转向 plt.title(Correlations between LEAVE_FLAG and variables,fontsize20) plt.show()6.1.3 肯德尔相关系数 plt.figure(figsize(16,8)) df.corr(methodkendall)[LEAVE_FLAG].sort_values(ascending False).plot(kindbar) plt.tick_params(labelsize14) # 设置坐标轴字体大小 plt.xticks(rotation45) # 设置x轴文字转向 plt.title(Correlations between LEAVE_FLAG and variables,fontsize20) plt.show()6.1.4 计算热力图 # 计算相关性矩阵 corr_matrix df.corr()# 绘制热力图 plt.figure(figsize(10, 8)) sns.heatmap(corr_matrix, annotTrue, cmapcoolwarm) plt.title(Correlation Heatmap, fontsize16) plt.show()6.2 主成分分析 PCA思想构造原变量的一系列线性组合形成几个综合指标以去除数据的相关性并使低维数据最大程度保持原始高维数据的方差信息 一般来说在进行数据降维之前需要先对其做归一化 from sklearn import preprocessing X_scaled preprocessing. scale(X) pca PCA(n_components2) # 加载PCA算法设置降维后主成分数目为2 # n_components的值不能大于n_features特征数和n_classes类别数之间的较小值减1。 reduced_x pca.fit_transform(X_scaled) # 对样本进行降维 reduced_x pd.DataFrame(reduced_x, columns [pca_1,pca_2])PCA代码 # -*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl from sklearn.decomposition import PCA # 加载PCA算法包 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn import svm import pandas as pddf pd.read_csv(rD:\Python\test\iris.csv) X df.iloc[:, 0:4] Y df.iloc[:, 4] x_train, x_test, y_train, y_test train_test_split(X, Y, test_size0.2) pca PCA(n_components2) # 加载PCA算法设置降维后主成分数目为2 # n_components的值不能大于n_features特征数和n_classes类别数之间的较小值减1。 reduced_x pca.fit_transform(X) # 对样本进行降维 reduced_x pd.DataFrame(reduced_x, columns [pca_1,pca_2]) print(reduced_x.head(5))# SVM分类 x_train, x_test, y_train, y_test train_test_split(reduced_x, Y, test_size0.2) clf svm.SVC(gammascale, decision_function_shapeovr) # 一对多法 # clf svm.SVC(gammascale, decision_function_shapeovo) # 一对一法 clf.fit(x_train, y_train.astype(int)) y_pred clf.predict(x_test)# 可视化,画分类结果图 N, M 500, 500 # 横纵各采样多少个值 x1_min, x2_min x_train.min(axis0) x1_max, x2_max x_train.max(axis0) t1 np.linspace(x1_min, x1_max, N) t2 np.linspace(x2_min, x2_max, M) x1, x2 np.meshgrid(t1, t2) # 生成网格采样点 x_show np.stack((x1.flat, x2.flat), axis1) # 测试点 y_predict clf.predict(x_show) cm_light mpl.colors.ListedColormap([#A0FFA0, #FFA0A0, #A0A0FF]) cm_dark mpl.colors.ListedColormap([g, r, b]) plt.pcolormesh(x1, x2, y_predict.reshape(x1.shape), cmapcm_light) plt.scatter(x_train.iloc[:, 0], x_train.iloc[:, 1], cy_train, cmapcm_dark, markero, edgecolorsk) plt.grid(True, ls:) plt.show()PCA结果 6.3 线性判别分析 LDA思想最早提出是为了解决生物问题的分类问题有监督的线性降维。使用数据的类别信息将高维的样本线性投影到低维空间中使得数据样本在低维空间中数据的类别区分度最大。 LDA代码 # 1.导入所需的库和模块 import matplotlib.pyplot as plt from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.datasets import load_iris# 2.加载数据集 iris load_iris() X iris.data y iris.target# 3.创建一个LDA对象并拟合数据 # 在这里n_components参数指定要保留的主成分数量。 lda LinearDiscriminantAnalysis(n_components2) X_lda lda.fit_transform(X, y)# 4.可以使用以下代码可视化结果 plt.scatter(X_lda[:, 0], X_lda[:, 1], cy) plt.xlabel(LD1) plt.ylabel(LD2) plt.show() LDA结果 七、数据归一化 特征主要分为连续特征和离散特征其中离散特征根据特征之间是否有大小关系又细分为两类。 连续特征一般采用归一标准化方式处理。离散特征特征之间没有大小关系。离散特征特征之间有大小关联则采用数值映射。 # 通过归一化处理使特征数据标准为1均值为0符合标准的正态分布 # 降低数值特征过大对预测结果的影响 # 除了目标特征全部做归一化目标特征不用做归一化会导致预测结果的解释变得困难 from sklearn.preprocessing import StandardScaler # 实例化一个转换器类 scaler StandardScaler(copyFalse) target df[LEAVE_FLAG] # 提取除目标特征外的其他特征 other_features df.drop(LEAVE_FLAG, axis1) # 对其他特征进行归一化 normalized_features scaler.fit_transform(other_features) # 将归一化后的特征和目标特征重新组合成DataFrame normalized_data pd.DataFrame(normalized_features, columnsother_features.columns) normalized_data[LEAVE_FLAG] target normalized_data.head()八、模型搭建 # 深拷贝 Xnormalized_data.copy() X.drop([LEAVE_FLAG],axis1, inplaceTrue) ydf[LEAVE_FLAG] #查看预处理后的数据 X.head()# 建立训练数据集和测试数据集 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split(X,y,test_size 0.3, random_state 0) print(原始训练集包含样本数量: , len(X_train)) print(原始测试集包含样本数量: , len(X_test)) print(原始样本总数: , len(X_train)len(X_test))# 使用分类算法 Classifiers[[RandomForest,RandomForestClassifier()],[LogisticRegression,LogisticRegression(C1000.0, random_state30, solverlbfgs,max_iter100000)],[NaiveBayes,GaussianNB()],[DecisionTree,DecisionTreeClassifier()],[AdaBoostClassifier, AdaBoostClassifier()],[GradientBoostingClassifier, GradientBoostingClassifier()],[XGB, XGBClassifier()] ]九、模型训练 from datetime import datetime import pickle import joblibdef get_current_time():current_time datetime.now()formatted_time current_time.strftime(%Y-%m-%d %H:%M:%S)return current_time, formatted_timeClassify_result[] names[] prediction[] i 0for name, classifier in Classifiers:start_time, formatted_time get_current_time()print(**********************************************************************)print(第{}个模型训练开始时间{} 模型名称为{}.format(i1, formatted_time, name))classifier classifierclassifier.fit(X_train, y_train)y_pred classifier.predict(X_test)recall recall_score(y_test, y_pred)precision precision_score(y_test, y_pred)f1score f1_score(y_test, y_pred)model_path models/{}_{}_model.pkl.format(name, round(precision, 5))print(开始保存模型文件路径为{}.format(model_path))# 保存模型方式1# with open(models/{}_{}_model.pkl.format(name, precision), wb) as file:# pickle.dump(classifier, file)# file.close()# 保存模型方式2joblib.dump(classifier, model_path)end_time datetime.now() # 获取训练结束时间print(第{}个模型训练结束时间:{}.format(i1, end_time.strftime(%Y-%m-%d %H:%M:%S)))print(训练耗时:, end_time - start_time)# 打印训练过程中的指标print(Classifier:, name)print(Recall:, recall)print(Precision:, precision)print(F1 Score:, f1score)print(**********************************************************************)# 保存指标结果class_eva pd.DataFrame([recall, precision, f1score])Classify_result.append(class_eva)name pd.Series(name)names.append(name)y_pred pd.Series(y_pred)prediction.append(y_pred)i 1十、评估模型 召回率recall的含义是原本为对的当中预测为对的比例值越大越好1为理想状态 精确率、精度precision的含义是预测为对的当中原本为对的比例值越大越好1为理想状态 F1分数F1-Score指标综合了Precision与Recall的产出的结果 F1-Score的取值范围从0到1的1代表模型的输出最好0代表模型的输出结果最差。 classifier_namespd.DataFrame(names) # 转成列表 classifier_namesclassifier_names[0].tolist() resultpd.concat(Classify_result,axis1) result.columnsclassifier_names result.index[recall,precision,f1score] result十一、预测模型 对于h5模型 from keras.models import load_model model load_model(lstm_model.h5) pred model.predict(X, verbose0) print(pred)对于pkl模型 loaded_model joblib.load(models/{}_model.pkl.format(name))由于没有预测数据集选择最后n条数为例进行预测。 # 由于没有预测数据集选择最后n条数为例进行预测。 n 500 pred_id SERV_ID.tail(n) # 提取预测数据集特征如果有预测数据集可以一并进行数据清洗和特征提取 pred_x X.tail(n)# 使用上述得到的最优模型 model GradientBoostingClassifier()model.fit(X_train,y_train) pred_y model.predict(pred_x) # 预测值# 预测结果 predDf pd.DataFrame({SERV_ID:pred_id, LEAVE_FLAG:pred_y}) print(*********************原始的标签情况*********************) print(df.tail(n)[LEAVE_FLAG].value_counts()) print(*********************预测的标签情况*********************) print(predDf[LEAVE_FLAG].value_counts()) print(*********************预测的准确率*********************) min1 min(df.tail(n)[LEAVE_FLAG].value_counts()[0],predDf[LEAVE_FLAG].value_counts()[0]) min2 min(df.tail(n)[LEAVE_FLAG].value_counts()[1],predDf[LEAVE_FLAG].value_counts()[1]) print({}%.format(round((min1min2)/n,3)*100))# 由于没有预测数据集选择最后n条数为例进行预测。 n 500 # 预测的数量 pred_id SERV_ID.tail(n) # 提取预测数据集特征如果有预测数据集可以一并进行数据清洗和特征提取 pred_x X.tail(n) # 加载模型 loaded_model joblib.load(models/GradientBoostingClassifier_0.77852_model.pkl) # 使用加载的模型进行预测 pred_y loaded_model.predict(pred_x) # 预测结果 predDf pd.DataFrame({SERV_ID:pred_id, LEAVE_FLAG:pred_y}) print(*********************原始的标签情况*********************) print(df.tail(n)[LEAVE_FLAG].value_counts()) print(*********************预测的标签情况*********************) print(predDf[LEAVE_FLAG].value_counts()) print(*********************预测的准确率*********************) min1 min(df.tail(n)[LEAVE_FLAG].value_counts()[0],predDf[LEAVE_FLAG].value_counts()[0]) min2 min(df.tail(n)[LEAVE_FLAG].value_counts()[1],predDf[LEAVE_FLAG].value_counts()[1]) print({}%.format(round((min1min2)/n,3)*100))
http://wiki.neutronadmin.com/news/109977/

相关文章:

  • 苏州网站建设caiyiduo百度关键词搜索怎么弄
  • 基金会网站开发方案网站项目上线流程
  • 做网站需要做手机版吗广东东莞地图
  • 机票最便宜网站建设小米路由器建设网站
  • 松江移动网站建设小程序开发平台哪种品牌的好
  • 中国书画画廊网站模板杭州网站制作模板
  • 网站建设工作不足及整改网络推广外包注意哪些
  • 笔记本电脑可以做网站服务器重庆做网站设计
  • 专业手机网站制作哪家好现在有什么有效的引流方法
  • 大连品牌网站建设公司深圳招聘官网
  • 企业网站建设方讯做临时网站
  • 寻花问柳一家专门做男人的网站可以建微信网站的
  • 5118网站如何使用免费版建一个网站需要哪些东西
  • 做外贸上哪些网站找客户镇江网站建设 找思创
  • 炫酷网站有哪些打电话叫人做网站
  • 北京网站建设网络公司域名如何注册?
  • 用新华做网站名是否侵权seo优化的价格
  • ...无锡网站制作上海专业的网站建
  • 网站运营知识旅游电子商务的三创赛网站建设
  • 备案停止网站dede网站如何换logo
  • 做网站相册移动端网站建设的方案
  • 渭南微网站建设中山网站建设模板网络公司
  • 网站首页轮播图怎么做的泰州做企业网站
  • 自建站有哪些站点企业管理培训课程机构
  • 东莞家具饰品东莞网站建设wordpress标题调用标签
  • 华为公司网站建设案例分析买网站
  • 网站建设 虚拟化适合大学生做的网站
  • 做品牌网站怎么样wordpress修改时区
  • 明星个人网站设计google搜索引擎入口
  • 成品网站免费模板食品公司