Пример #1
0
def arimaPredict():
    # 首先创建类实例
    ap = arimaPredicter.predicter()
    # 设置索引,函数的第一个参数是训练数据开始的日期,第二次参数是索引的长度,索引
    # 长度不小于训练数据的长度即可
    ap.createIndex(dt.datetime(2015, 1, 1), 243)
    # 可以直接调用sarimaTrain函数训练arima模型,只需将训练标签输入即可
    model = ap.sarimaTrain(trainLabel)
    # 得到模型后调用sarimaPredict函数便可以预测紧接着训练数据之后若干天的预测值,
    # 两个参数分别为先前得到的模型与预测序列的长度
    # 这是一个静态函数,可以直接通过类名调用
    predictLabel = ap.sarimaPredict(model, 43)
    # 这样便可以得到结果
    plt.plot(testLabel, color='blue', label='actual')
    plt.plot(predictLabel, color='red', label='predict')
    plt.title('ARIMA(default)')
    plt.show(block=False)

    # 事实上,在sarimaTrain函数中,你也可以指定ARIMA模型的两个参数(ar, ma)
    model = ap.sarimaTrain(trainLabel, para=(2, 2))
    # 如果参数指定得当,结果将更好,反之更糟糕
    predictLabel = ap.sarimaPredict(model, 43)
    plt.plot(testLabel, color='blue', label='actual')
    plt.plot(predictLabel, color='red', label='predict')
    plt.title('ARIMA(2, 2)')
    plt.show(block=False)

    # 如果你不知道该指定什么参数,那么可以使用sarimaParaSelect函数选择参数,该函数
    # 的输入为类别名称,训练集,测试集及决定在参数选择时是否参考AIC的布尔变量
    # 目前来看,在参数选择时是否参考AIC的结果差不多
    # 函数执行后将会返回最优的参数以及测试集上的运行结果,同时实例中也会以类别名称为
    # 键存储这个最优参数
    para, _ = ap.sarimaParaSelect(1001, trainLabel[:-50], trainLabel[-50:],
                                  True)

    # 由于最优参数已被存储,再次训练是指明类别名称即可
    model = ap.sarimaTrain(trainLabel, classNo=1001)
    # 预测的方式始终相同
    predictLabel = ap.sarimaPredict(model, 43)
    plt.plot(testLabel, color='blue', label='actual')
    plt.plot(predictLabel, color='red', label='predict')
    plt.title('ARIMA(%d, %d)' % (para[0], para[1]))
    plt.show(block=False)
Пример #2
0
def sariamTest():
    f = open("datam.csv", "r")
    f_csv = csv.reader(f)

    # writer = open("report.txt", "w")

    ap = arimaPredicter.predicter()
    ap.setIndex(index)

    for i in range(0, 10):
        midclass, trD, trL, teD, teL = getData(f_csv, 120, 0)
        if (midclass == 0):
            break

        trainData = trL[:99]
        testData = trL[99:]

        ap.test_stationarity(trL)

        greatfit = (0, 0, 0)
        minaic = 99999

        for p in range(0, 3):
            for q in range(0, 3):
                try:
                    ap.setPara(midclass, (p, q))
                    model = ap.sarimaTrain(midclass, trainData)
                    if (model.aic < minaic):
                        minaic = model.aic
                        greatfit = (p, 1, q)
                    result = ap.sarimaPredict(model, len(testData))
                    print("(%d,%d) %f %f\n" %
                          (p, q, model.aic, getBias(testData, result)))

                except:
                    pass

        print("midclass %d: %d %d\n" % (midclass, greatfit[0], greatfit[2]))

    f.close()
Пример #3
0
import KNN_interface

larclasPred = {}
larclasLabl = {}
totalBias = 0
totalCount = 0

dtIndex = [dt.datetime(2015, 1, x) for x in range(1, 32)]
dtIndex = dtIndex + [dt.datetime(2015, 2, x) for x in (range(1, 29))]
dtIndex = dtIndex + [dt.datetime(2015, 3, x) for x in range(1, 32)]
dtIndex = dtIndex + [dt.datetime(2015, 4, x) for x in (range(1, 31))]

modelChoose = []
lcModelChoose = []

ap = arimaPredicter.predicter()
ap.setIndex(dtIndex)


def dataLog(midclass, accuracy, trainLabl, testPred, testLabl):
    with open('compare.csv', 'ab') as f:
        writer = csv.writer(f)
        count = 1
        writer.writerow([midclass, accuracy])
        for x in trainLabl:
            writer.writerow([count, x])
            count += 1
        for x in range(0, len(testPred)):
            writer.writerow([count, testLabl[x], testPred[x]])
            count += 1
Пример #4
0
def sariamOutput():
    loader = dataLoader.loader("datam.csv", "lcdatam.csv")
    loader.setSize(120, 0, 0)

    f1 = open("result01.csv", "wb")
    writer1 = csv.writer(f1)
    f2 = open("result11.csv", "wb")
    writer2 = csv.writer(f2)
    f3 = open("result12.csv", "wb")
    writer3 = csv.writer(f3)

    ap = arimaPredicter.predicter()
    ap.setIndex(index)

    while (True):
        midclass, _, trainData, _, _ = loader.getNextMidClass()
        if (midclass == 0):
            break

        ap.setPara(midclass, (0, 1))
        try:
            model = ap.sarimaTrain(midclass, trainData)
            result = ap.sarimaPredict(model, 30)
        except:
            result = np.zeros(30)
        for i in range(0, 30):
            writer1.writerow([midclass, "201505%02d" % (i + 1), result[i]])

        ap.setPara(midclass, (1, 1))
        try:
            model = ap.sarimaTrain(midclass, trainData)
            result = ap.sarimaPredict(model, 30)
        except:
            result = np.zeros(30)
        for i in range(0, 30):
            writer2.writerow([midclass, "201505%02d" % (i + 1), result[i]])

        ap.setPara(midclass, (1, 2))
        try:
            model = ap.sarimaTrain(midclass, trainData)
            result = ap.sarimaPredict(model, 30)
        except:
            result = np.zeros(30)
        for i in range(0, 30):
            writer3.writerow([midclass, "201505%02d" % (i + 1), result[i]])

    while (True):
        larclass, _, trainData, _, _ = loader.getNextLarClass()
        if (larclass == 0):
            break

        ap.setPara(larclass, (0, 1))
        try:
            model = ap.sarimaTrain(larclass, trainData)
            result = ap.sarimaPredict(model, 30)
        except:
            result = np.zeros(30)
        for i in range(0, 30):
            writer1.writerow([larclass, "201505%02d" % (i + 1), result[i]])

        ap.setPara(larclass, (1, 1))
        try:
            model = ap.sarimaTrain(larclass, trainData)
            result = ap.sarimaPredict(model, 30)
        except:
            result = np.zeros(30)
        for i in range(0, 30):
            writer2.writerow([larclass, "201505%02d" % (i + 1), result[i]])

        ap.setPara(larclass, (1, 2))
        try:
            model = ap.sarimaTrain(larclass, trainData)
            result = ap.sarimaPredict(model, 30)
        except:
            result = np.zeros(30)
        for i in range(0, 30):
            writer3.writerow([larclass, "201505%02d" % (i + 1), result[i]])

    f1.close()
    f2.close()
    f3.close()
    loader.closeFiles()