资源简介

逻辑回归一般只能解决二分问题,但是进行扩展之后可以解决多线性分类问题。这是一个完整的Softmax regression解决多线性分类的源代码,python3编码,可直接运行,有输入数据和预测数据的可视化编程。还训练部分和测试部分的源代码进行了封装,可直接运行。

资源截图

代码片段和文件信息

import numpy as np
import matplotlib.pyplot as plt
import random as rd


#   模型训练函数
def gradientAscent(feature_data label_data k maxCycle alpha):
    “““
    利用梯度下降法训练Softmax模型
    :param feature_data:(mat)特征
    :param label_data:(mat)标签
    :param k:(int)类别的个数
    :param maxCycle:(int)最大迭代个数
    :param alpha: (float)学习速率
    :return:weights(mat)权重
    “““
    m n = np.shape(feature_data)
    weights = np.mat(np.ones((n k)))
    i = 0
    while i <= maxCycle:
        err = np.exp(feature_data * weights)
        if i % 1000 == 0:
            print(“\t-----iter:“ i “cost:“ cost(err label_data))
        row_sum = -err.sum(axis=1)
        row_sum = row_sum.repeat(k axis=1)
        err = err / row_sum
        for x in range(m):
            err[x label_data[x 0]] += 1
        weights = weights + (alpha / m) * feature_data.T * err
        i += 1
    return weights


def cost(err label_data):
    “““
    计算损失函数值
    :param err:(mat)exp值
    :param label_data:()mat标签的值
    :return:sum_cost/m  (float):损失函数的值
    “““
    m = np.shape(err)[0]
    sum_cost = 0.0
    for i in range(m):
        if err[i label_data[i 0]] / np.sum(err[i :]) > 0:
            sum_cost -= np.log(err[i label_data[i 0]] / np.sum(err[i :]))
        else:
            sum_cost -= 0
    return sum_cost / m


def load_data(inputfile):
    “““
    :param inputfile:训练样本的文件名
    :return:feature_data(mat)特征
            label_data(mat)标签
            k(int)类别的个数
    “““
    f = open(inputfile)
    feature_data = []
    label_data = []
    for line in f.readlines():
        feature_temp = []
        feature_temp.append(1)
        lines = line.strip().split(“\t“)
        for i in range(len(lines) - 1):
            feature_temp.append(float(lines[i]))
        label_data.append(int(lines[-1]))
        feature_data.append(feature_temp)
    f.close()
    # print(feature_data)
    # feature_data = np.mat(feature_data)
    # print(feature_data)
    return np.mat(feature_data) np.mat(label_data).T len(set(label_data))


def save_model(filename weights):
    “““
    保存最终的模型
    :param filename:(string)文件名
    :param w: (mat)SR 模型的权重
    :return:
    “““
    f_w = open(filename “w“)
    m n = np.shape(weights)
    for i in range(m):
        w_tmp = []
        for j in range(n):
            w_tmp.append(str(weights[i j]))
        f_w.write(“\t“.join(w_tmp) + “\n“)
    f_w.close()


def figurePlot(feature label):
    “““
    根据标签画出各个类别的点图
    :param feature:(mat)特征
    :param label:(mat)标签
    :return:
    “““
    point_red = []
    point_blue = []
    point_yellow = []
    point_green = []
    r = np.shape(feature)[0]
    for index in range(r):
        temp = -2  # 从右到左第二个数
        if label[index] == 0:
            point_red.append(feature[index temp])
            point_red.append(feature[index temp + 1])  # 如果一次放两个元素feature[index 1:3],会被当做一个整体存放在list中
        elif la

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-11-03 12:54  Softmax Regression(逻辑回归多线性分类)\
     目录           0  2018-11-03 12:57  Softmax Regression(逻辑回归多线性分类)\.idea\
     文件         408  2018-11-01 20:38  Softmax Regression(逻辑回归多线性分类)\.idea\Softmax Regression.iml
     目录           0  2018-11-03 12:58  Softmax Regression(逻辑回归多线性分类)\.idea\inspectionProfiles\
     文件         294  2018-11-01 20:38  Softmax Regression(逻辑回归多线性分类)\.idea\misc.xml
     文件         295  2018-11-01 20:38  Softmax Regression(逻辑回归多线性分类)\.idea\modules.xml
     文件       23028  2018-11-03 12:57  Softmax Regression(逻辑回归多线性分类)\.idea\workspace.xml
     文件        6363  2018-11-03 12:52  Softmax Regression(逻辑回归多线性分类)\SR_functions.py
     文件         488  2018-11-03 12:54  Softmax Regression(逻辑回归多线性分类)\SR_main.py
     文件         576  2018-11-03 11:40  Softmax Regression(逻辑回归多线性分类)\SR_test.py
     文件        3129  2018-10-31 18:21  Softmax Regression(逻辑回归多线性分类)\SoftInput
     目录           0  2018-11-03 12:54  Softmax Regression(逻辑回归多线性分类)\__pycache__\
     文件        5508  2018-11-03 12:54  Softmax Regression(逻辑回归多线性分类)\__pycache__\SR_functions.cpython-36.pyc
     文件       12000  2018-11-03 12:54  Softmax Regression(逻辑回归多线性分类)\test_result
     文件         228  2018-11-03 12:54  Softmax Regression(逻辑回归多线性分类)\weights

评论

共有 条评论