数据分析与挖掘实战——挖掘建模(神经网络)
❗❗❗本文最后更新于 328 天前,其中的信息可能已经过时;如有错误请在文章下方评论✅,欢迎纠错🥰!
本文只截取《Python数据分析与挖掘实战(第2版)》的第五章部分代码

第三方库版本——>

pandas 1.5.2

numpy 1.23.5

scikit-learn 1.1.3

keras 2.11.0

matplotlib 3.6.2

statsmodels 0.13.5

附上清华镜像使用方法:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple XXX
XXX为第三方库名称
在安装keras第三方库后进行调用时通常会出现“No module named tensorflow”,因此需要进行安装tensorflow库,本文使用的版本为2.11.0
# 载入第三方库
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier as DTC
from sklearn.tree import export_graphviz
from keras.models import Sequential
from keras.layers.core import Dense, Activation
import sklearn.metrics as mt
from sklearn.metrics import cohen_kappa_score
from sklearn.metrics import roc_curve  #导入ROC曲线函数
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
from statsmodels.graphics.tsaplots import plot_acf  # 自相关图
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.tsa.stattools import adfuller as ADF  # 平稳性检测
from statsmodels.stats.diagnostic import acorr_ljungbox  # 白噪声检验
from statsmodels.tsa.arima.model import ARIMA
from sklearn.model_selection import train_test_split

P113-114

# 参数初始化
filename = '../data/sales_data.xls'
data = pd.read_excel(filename, index_col='序号')  # 导入数据

# 数据是类别标签,要将它转换为数据
# 用1来表示“好” “是” “高” 这3个属性,用-1来表示”坏“ ”否“ ”低“
data[data == '好'] = 1
data[data == '是'] = 1
data[data == '高'] = 1
data[data != 1] = -1
x = data.iloc[:, :3].values.astype(int)
y = data.iloc[:, 3].values.astype(int)

dtc = DTC(criterion='entropy')  # 建立决策树模型,基于信息熵
dtc.fit(x, y)  # 训练模型

# 导入相关函数,可视化决策树
# 导出的结果是一个dot文件,需要安装Graphviz才能将它转换为pdf或png等格式
x = pd.DataFrame(x)
with open("../tmp/tree.dot", "w") as f:
    f = export_graphviz(dtc, feature_names=x.columns, out_file=f)

P119-120

# 参数初始化
inputfile = '../data/sales_data.xls'
data = pd.read_excel(inputfile, index_col='序号')  # 导入数据

# 数据是类别标签,要将它转换为数据
# 用1来表示“好” “是” “高” 这3个属性,用-1来表示”坏“ ”否“ ”低“
data[data == '好'] = 1
data[data == '是'] = 1
data[data == '高'] = 1
data[data != 1] = 0
x = data.iloc[:, :3].values.astype(int)
y = data.iloc[:, 3].values.astype(int)

model = Sequential()
model.add(Dense(input_dim=3, units=10))
model.add(Dense(input_dim=10, units=1))
# 由于0-1输出,用sigmoid函数作为激活函数
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam')

# 编译模型。由于我们做的是二元分类,所以我们指定损失函数为binary_crossentropy,以及模式为binary
# 另外常见的损失函数还有mean_squared_error、categorical_crossentropy等
# 对于求解方法,我们指定用adam,此外还有sgd、rmsprop等可选

# 训练模型,学习一千次
model.fit(x, y, epochs=1000, batch_size=10)
# 分类预测 
"""由于keras第三方库版本过高,因此predict_classes方法已被弃用,使用predict方法替代"""
"""yp = model.predict(x).reshape(len(y))"""
yp = np.around((model.predict(x).reshape(len(y))), 0).astype(int)

from cm_plot import *  # 导入自行编写的混淆矩阵可视化函数
cm_plot(y, yp).show()  # 显示混淆矩阵可视化结果

ppt91

train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.2, random_state=0)
dtc = DTC()  #(criterion='entropy')  # 建立决策树模型,基于信息熵
dtc.fit(train_x, train_y)  # 训练模型
yp = dtc.predict(test_x)
acc = mt.accuracy_score(test_y, yp)  #正确分类的得分
acc_num = mt.accuracy_score(test_y, yp, normalize=False)  #正确分类的样本数量
prs = mt.precision_score(test_y, yp)
rcl = mt.recall_score(test_y, yp)
ffs = mt.f1_score(test_y, yp)  # F1指数
print("正确分类的得分为:", acc)
print("正确分类的样本数量为:", acc_num)
print("精确分类的得分为:", prs)
print("召回的得分为:", rcl)
print("F1指数为:", ffs)

ppt94

y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
kappa_value = cohen_kappa_score(y_true, y_pred)
print("kappa值为%f" % kappa_value)

ppt98

fpr, tpr, thresholds = roc_curve(y, dtc.predict(x))
# sklearn.metrics.roc_curve(y_true,y_score,pos_label=None,sample_weight=None,drop_intermediate=True)
# y_true: 真实标签矩阵;y_score:模型的预测结果矩阵;pos_label: 标签中认定为正的label个数;
# sample_weight:采样权重;drop_intermediate:可选择去掉一些对于ROC性能不利的阈值,使得得到的曲线有更好的表现性能
plt.plot(fpr, tpr, linewidth=2, label='roc curve', color='green')  #作出ROC曲线
plt.xlabel('False Positive Rate')  #坐标轴标签
plt.ylabel('True Positive Rate')  #坐标轴标签
plt.ylim(0, 1.05)  #边界范围
plt.xlim(0, 1.05)  #边界范围
# plt.legend(loc='best',frameon=True) #图例
plt.legend(loc=0)
# 0: ‘best'  1: ‘upper right'  2: ‘upper left'  3: ‘lower left'  4: ‘lower right'  5: ‘right'
# 6: ‘center left'  7: ‘center right'  8: ‘lower center'  9: ‘upper center'  10: ‘center'
plt.show()  # 显示作图结果

P154-155 PPT62

# 参数初始化
discfile = '../data/arima_data.xls'
forecastnum = 5

# 读取数据,指定日期列为指标,pandas自动将“日期”列识别为Datetime格式
data = pd.read_excel(discfile, index_col=u'日期')

# 时序图
data.plot()
plt.show()

# 自相关图
plot_acf(data).show()

# 平稳性检测
print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))
# 返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore

# 差分后的结果
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot()  # 时序图
plt.show()
plot_acf(D_data).show()  # 自相关图
plot_pacf(D_data).show()  # 偏自相关图
print(u'差分序列的ADF检验结果为:\n', ADF(D_data[u'销量差分']))  # 平稳性检测

# 白噪声检验
print(u'差分序列的白噪声检验结果为:\n', acorr_ljungbox(D_data, lags=1))  # 返回统计量和p值

# 定阶
data[u'销量'] = data[u'销量'].astype(float)
pmax = int(len(D_data) / 10)  # 一般阶数不超过length/10
qmax = int(len(D_data) / 10)  # 一般阶数不超过length/10
bic_matrix = []  # BIC矩阵
for p in range(pmax + 1):
    tmp = []
    for q in range(qmax + 1):
        try:  # 存在部分报错,所以用try来跳过报错。
            """建立ARIMA模型时,由于第三方库版本问题,需使用order参数"""
            tmp.append(ARIMA(data, order=(p, 1, q)).fit().bic)
        except:
           tmp.append(None)
    bic_matrix.append(tmp)

bic_matrix = pd.DataFrame(bic_matrix)  # 从中可以找出最小值
p, q = bic_matrix.stack().idxmin()  # 先用stack展平,然后用idxmin找出最小值位置。
print(u'BIC最小的p值和q值为:%s、%s' % (p, q))
"""建立ARIMA模型时,由于第三方库版本问题,需使用order参数"""
model = ARIMA(data, order=(p, 1, q)).fit()  # 建立ARIMA(0, 1, 1)模型
"""由于statsmodels版本过高,因此summary2方法已被弃用,使用summary方法替代,输出模型报告"""
print('模型报告为:\n', model.summary())
print('预测未来5天,其预测结果、标准误差、置信区间如下:\n', model.forecast(5))

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇