Python中的多输出多类机器学习

Python中的多输出多类机器学习,python,machine-learning,neural-network,deep-learning,decision-tree,Python,Machine Learning,Neural Network,Deep Learning,Decision Tree,我一直在研究并努力寻找解决这个问题的最佳方法。我有一个训练数据集和一个测试数据集。测试数据集缺少训练数据集具有的两个特征列(通道和扇区-均由4个类组成) 我已经在数据上建立了一个决策树,但是当我需要在两个方面都进行培训时,我只能使用它在任何一个通道或扇区上进行培训 有谁能给我一个用python实现多类多输出机器学习的建议吗 import os import subprocess import pandas as pd import numpy as np from sklearn.tree i

我一直在研究并努力寻找解决这个问题的最佳方法。我有一个训练数据集和一个测试数据集。测试数据集缺少训练数据集具有的两个特征列(通道和扇区-均由4个类组成)

我已经在数据上建立了一个决策树,但是当我需要在两个方面都进行培训时,我只能使用它在任何一个通道或扇区上进行培训

有谁能给我一个用python实现多类多输出机器学习的建议吗

import os
import subprocess

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier, export_graphviz

def getPath(thisFile):
    if os.path.exists(thisFile):
        df = pd.read_csv(thisFile, header=0)
    else:
        return
    return df

def visualize_tree(tree, feature_names):

    with open("dt.dot", 'w') as f:
        export_graphviz(tree, out_file=f,
                        feature_names=feature_names)

    command = ["dot", "-Tpng", "dt.dot", "-o", "dt.png"]
    try:
        subprocess.check_call(command)
    except:
        exit("Could not run dot, ie graphviz, to "
             "produce visualization")

data = np.loadtxt("newTrain2.csv", delimiter=',')
X = data[:, 1:4]
quantity = data[:, 2]
for i in range(len(quantity)):
    if quantity[i] < 30:
        quantity[i] = 1
    if quantity[i] >= 25 and quantity[i] < 75:
        quantity[i] = 2
    if quantity[i] >= 75 and quantity[i] < 250:
        quantity[i] = 3
    if quantity[i] > 250:
        quantity[i] = 4
revenue = data[:, 3]
for i in range(len(revenue)):
    if revenue[i] < 1000:
        revenue[i] = 1
    if revenue[i] >= 1000 and revenue[i] < 4000:
        revenue[i] = 2
    if revenue[i] >= 4000 and revenue[i] < 10000:
        revenue[i] = 3
    if revenue[i] > 10000:
        revenue[i] = 4
X[:, 1] = quantity
X[:, 2] = revenue



targets = data[:,4]

thisTree = DecisionTreeClassifier(min_samples_split=30, random_state=99)
thisTree.fit(X, targets)
visualize_tree(thisTree, ["product", "quantity", "revenue"])
导入操作系统
导入子流程
作为pd进口熊猫
将numpy作为np导入
从sklearn.tree导入决策树分类程序,导出图形
def getPath(此文件):
如果os.path.exists(此文件):
df=pd.read\u csv(此文件,头=0)
其他:
返回
返回df
def可视化_树(树、特征_名称):
以开放(“dt.dot”和“w”)作为f:
导出图形viz(树,输出文件=f,
要素名称=要素名称)
command=[“dot”、“-Tpng”、“dt.dot”、“-o”、“dt.png”]
尝试:
子进程检查调用(命令)
除:
退出(“无法运行点,即graphviz到”
“制作可视化”)
data=np.loadtxt(“newTrain2.csv”,分隔符=',')
X=数据[:,1:4]
数量=数据[:,2]
对于范围内的i(长度(数量)):
如果数量[i]<30:
数量[i]=1
如果数量[i]>=25且数量[i]<75:
数量[i]=2
如果数量[i]>=75且数量[i]<250:
数量[i]=3
如果数量[i]>250:
数量[i]=4
收入=数据[:,3]
对于范围内的i(len(收入)):
如果收入[i]<1000:
收入[i]=1
如果收入[i]>=1000且收入[i]<4000:
收入[i]=2
如果收入[i]>=4000且收入[i]<10000:
收入[i]=3
如果收入[i]>10000:
收入[i]=4
X[:,1]=数量
X[:,2]=收入
目标=数据[:,4]
thisTree=DecisionTreeClassifier(最小样本数分割=30,随机状态=99)
ThistTree.fit(X,目标)
可视化_树(此树,[“产品”、“数量”、“收入”])

一种方法是将两个缺少的列合并在一起,只在一个列中转换。如果每个列有4个不同的类,则合并列将有4*4=16个类。

我最终这样做了,但我确信有更好的方法