分类算法——决策树
Posted
技术标签:
【中文标题】分类算法——决策树【英文标题】:Classification algorithm - decision tree 【发布时间】:2018-12-12 17:22:15 【问题描述】:我有从感应电机收集的 MPU6050 加速度计数据。我想训练一种算法并使用新数据集进行预测。
我已经使用决策树分类器训练了算法并获得了 100% 的分数并进行了测试
当我尝试给这个模型提供新的数据集时,分类没有正确完成。我在代码末尾给出了一个例子。
请在下面找到代码:
import pandas as pd
import numpy
import pickle
from pandas.tools.plotting import scatter_matrix
from matplotlib import cm
filename=pd.read_csv("C:/Users/Meena/Desktop/Datawithlabel.txt", sep=',')
filename.columns = ["x", "y", "z","Label"]
feature_names=['x']
X=filename[feature_names]
y=filename['Label']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=7)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier().fit(X_train, y_train)
print('Accuracy of Decision Tree classifier on training set: :.2f'
.format(clf.score(X_train, y_train)))
决策树分类器在训练集上的准确度:1.00
Filename='final_model.sav'
pickle.dump(clf,open(Filename,'wb'))
load_model=pickle.load(open(Filename,'rb'))
result=load_model.score(X_test,y_test)
print(result)
0.9393939393939394
load_model=pickle.load(open(Filename,'rb'))
filename1=pd.read_csv("C:/Users/Meena/Desktop/Motor2withloadsafter5min.txt", sep=',')
filename1.columns = ["x", "y", "z"]
Datatopredict=filename1[['x']]
prediction = load_model.predict(Datatopredict)
print(prediction)
即使对于这些值,它在训练集中作为非工作类给出,但在预测中仍然作为工作类产生。不知道哪里出错了……
在下面的数据中,第一列是索引,第二列是加速度计的 X 轴数据
590 0.03
591 0.03
592 0.02
593 0.02
594 0.01
595 0.04
596 0.12
597 0.12
598 0.11
599 0.14
['工作''工作''工作''工作''工作''工作''工作' '工作' '工作' '工作']
This is the screenshot of the training data
【问题讨论】:
请更详细地解释你在说什么。"Even though for these values its given as non working class in training set, it still yields as working class in prediction"
是什么意思?相同的值是否被不同地预测。可以分享一下训练数据吗?
训练数据集太大,我无法分享。但是请检查我附加的新屏幕截图,其中值 [596 - 599] 的类被分类为不工作,但预测的结果将它们分类为工作
【参考方案1】:
除了我上面的评论之外,我注意到的一件事是您没有缩放测试值。
您还需要在 X_test 上使用相同的缩放器,例如:X_test = scaler.transform(X_test)
,然后再进行预测。所以还要腌制scaler
并在测试期间加载它。
训练期间:
Filename = 'final_model.sav'
pickle.dump(clf, open(Filename, 'wb'))
scaler_Filename = 'final_scalar.sav'
pickle.dump(scaler, open(scaler_Filename, 'wb'))
测试期间:
load_scaler = pickle.load(open(scaler_Filename,'rb'))
X_test = load_scaler.transform(X_test)
load_model = pickle.load(open(Filename,'rb'))
result = load_model.score(X_test,y_test)
print(result)
关于新数据:
Datatopredict = load_scaler.transform(Datatopredict)
prediction = load_model.predict(Datatopredict)
【讨论】:
当我尝试按照您所说的进行缩放时,出现以下错误: -------------- ------------------------------------------------- 属性错误Traceback(最近一次调用最后一次)以上是关于分类算法——决策树的主要内容,如果未能解决你的问题,请参考以下文章