sog*_*ogu 2 python classification machine-learning scikit-learn data-science
数据集 0-9 列:浮动特征(产品的参数) 10 列:int 标签(产品)
目标
计算标签的 0-1 分类确定性分数(这是我当前的代码应该做的)
为每行 (22'000) 的每个“product_name”(300 列)计算相同的确定性分数
错误我使用 sklearn.tree.DecisionTreeClassifier。我正在尝试使用“predict_proba”,但它给出了一个错误。
蟒蛇代码
data_train = pd.read_csv('data.csv')
features = data_train.columns[:-1]
labels = data_train.columns[-1]
x_features = data_train[features]
x_label = data_train[labels]
X_train, X_test, y_train, y_test = train_test_split(x_features, x_label, random_state=0)
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
clf = DecisionTreeClassifier(max_depth=3).fit(X_train, y_train)
class_probabilitiesDec = clf.predict_proba(y_train)
#ERORR: ValueError: Number of features of the model must match the input. Model n_features is 10 and input n_features is 16722
print('Decision Tree Classification Accuracy Training Score (max_depth=3): {:.2f}'.format(clf.score(X_train, y_train)*100) + ('%'))
print('Decision Tree Classification Accuracy Test Score (max_depth=3): {:.2f}'.format(clf.score(X_test, y_test)*100) + ('%'))
print(class_probabilitiesDec[:10])
# if I use X_tranin than it jsut prints out a buch of 41 element vectors: [[ 0.00490808 0.00765327 0.01123035 0.00332751 0.00665502 0.00357707
0.05182597 0.03169453 0.04267532 0.02761833 0.01988187 0.01281091
0.02936528 0.03934781 0.02329257 0.02961484 0.0353548 0.02503951
0.03577073 0.04700108 0.07661592 0.04433907 0.03019715 0.02196157
0.0108976 0.0074869 0.0291989 0.03951418 0.01372598 0.0176358
0.02345895 0.0169703 0.02487314 0.01813493 0.0482489 0.01988187
0.03252641 0.01572249 0.01455786 0.00457533 0.00083188]
[....
Run Code Online (Sandbox Code Playgroud)
特征(列)
(最后一栏是标签)0 1 1 1 1.0 1462293561 1462293561 0 0 0.0 0.0 1 1 2 2 2 8.0 1460211580 1461091152 1 1 0.0 0.0 2 2 3 3 3 1.0 1469869039 1470560880 1 1 0.0 0.0 3 3 4 4 4 1.0 1461482675 1461482675 0 0 0.0 0.0 4 4 5 5 5 5.0 1462173043 1462386863 1 1 0.0 0.0 5
类列(300 列项目)
标题行:苹果游戏机电池......第一行的分数:0.763 0.346 0.345 .... 第二行的分数:0.256 0.732 0.935 ....
例如:当某人对猫 VS 进行图像分类时使用的相似分数。dog 和分类给出了置信度分数。
您无法预测标签的概率。
predict_proba
根据您的 X 数据预测每个标签的概率,因此:
class_probabilitiesDec = clf.predict_proba(X_test)
Run Code Online (Sandbox Code Playgroud)
您发布的内容为“当我使用 X_train 时”:
[[ 0.00490808 0.00765327 0.01123035 0.00332751 0.00665502 0.00357707
0.05182597 0.03169453 0.04267532 0.02761833 0.01988187 0.01281091
0.02936528 0.03934781 0.02329257 0.02961484 0.0353548 0.02503951
0.03577073 0.04700108 0.07661592 0.04433907 0.03019715 0.02196157
0.0108976 0.0074869 0.0291989 0.03951418 0.01372598 0.0176358
0.02345895 0.0169703 0.02487314 0.01813493 0.0482489 0.01988187
0.03252641 0.01572249 0.01455786 0.00457533 0.00083188]
Run Code Online (Sandbox Code Playgroud)
是每个可能标签为真的概率列表。
编辑
阅读您的评论后,预测 proba 正是您想要的。
让我们举个例子。在下面的代码中,我们有一个包含 3 个类的分类器:11、12 或 13。
如果输入是 1,分类器应该预测 11
如果输入是 2,分类器应该预测 12
...
如果输入是 7,分类器应该预测 13
clf = DecisionTreeClassifier()
clf.fit([[1],[2],[3],[4],[5],[6],[7]], [[11],[12],[13],[13],[12],[11],[13]])
Run Code Online (Sandbox Code Playgroud)
现在,如果您有单行的测试数据,例如 5,那么分类器应该预测 12。所以让我们尝试一下。
clf.predict([[5]])
Run Code Online (Sandbox Code Playgroud)
瞧:结果是 array([12])
如果我们想要一个概率,那么预测 proba 是要走的路:
clf.predict_proba([[5]])
Run Code Online (Sandbox Code Playgroud)
我们得到 [array([0., 1., 0.])]
在这种情况下,数组[0., 1., 0.]
意味着:
第 11 类的概率为 0%
第 12 类的概率为 100%
第 13 类的概率为 0%
如果我是正确的那正是你想要的。您甚至可以将其映射到您的类的名称:
probabilities = clf.predict_proba([[5]])[0]
{clf.classes_[i] : probabilities[i] for i in range(len(probabilities))}
Run Code Online (Sandbox Code Playgroud)
它为您提供了一个包含类名概率的字典:
{11: 0.0, 12: 1.0, 13: 0.0}
Run Code Online (Sandbox Code Playgroud)
现在,在您的情况下,您有更多的类,而不仅仅是 [11,12,13],因此数组变得更长。并且对于数据集中的每一行, predict_proba 都会创建一个数组,因此对于多于一行的数据,您的输出将变成一个矩阵。
归档时间: |
|
查看次数: |
571 次 |
最近记录: |