如何控制功能[机器学习]的数量?

时间:2019-08-06 06:57:41

标签: python machine-learning random-forest feature-extraction

我正在编写此机器学习代码(分类)以在两个类之间进行分类。我首先使用一种功能来捕获所有图像。

例如: (注意:1和0用于标记) A类= [(4295046.0,1),(4998220.0,1),(4565017.0,1),(4078291.0,1),(4350411.0,1),(4434050.0,1),(4201831.0,1),(4203570.0,1 ),(4197025.0、1),(4110781.0、1),(4080568.0、1),(4276499.0、1),(4363551.0、1),(4241573.0、1),(4455070.0、1),(5682823.0、1), (5572122.0,1),(5382890.0,1),(5217487.0,1),(4714908.0,1),(4697137.0,1),(4057898.0,1),(4143981.0,1),(3899129.0,1),(3830584.0) ,1),(3557377.0,1),(3125518.0,1),(3197039.0,1),(3109404.0,1),(3024219.0,1),(3066759.0,1),(2726363.0,1),(3507626.0,1 ),..... etc]

B类= [(7179088.0,0),(7144249.0,0),(6806806.0,0),(5080876.0,0),(5170390.0,0),(5694876.0,0),(6210510.0,0),( 5376014.0,0),(6472171.0,0),(7112956.0,0),(7356507.0,0),(9180030.0,0),(9183460.0,0),(9212517.0,0),(9055663.0,0),(9053709.0, 0),(9103067.0、0),(8889903.0、0),(8328604.0、0),(8475442.0、0),(8499221.0、0),(8752169.0、0),(8779133.0、0),(8756789.0、0) ,(8990732.0,0),(9027381.0,0),(9090035.0,0),(9343846.0,0),(9518609.0,0),(9435149.0,0),(9365842.0,0),(9395256.0,0),( 4381880.0,0),(4749338.0,0),(5296143.0,0),(5478942.0,0),(5610865.0,0),(5514997.0,0),(5381010.0,0),(5090416.0,0),(4663958.0, 0),(4804526.0、0),(4743107.0、0),(4898914.0、0),(5018503.0、0),(5778240.0、0),(5741893.0、0),(4632926.0、0),(5208486.0、0) ,(5633403.0,0),(5699410.0,0),(5748260.0,0),(5869260.0,0),.... etc]

/data is A and B combined

x = [[each[0]] for each in data]
y = [[each[1]] for each in data]
print (len(x), len(y))

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, 
random_state=42)
print (len(x_train), len(x_test))
print (len(y_train), len(y_test))

from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)
clf.fit(x_train, y_train)

问题:

要进行哪些更改才能添加其他功能?添加功能时A和B的外观,我是否更改此行

clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)

何时使用两个功能?

我的猜测:

class A = [(4295046.0,secons功能,1),(4998220.0,secons功能,1),(4565017.0,secons功能,1),(4078291.0,secons功能,1),(4350411.0,secons功能,1 ),(4434050.0,1),......] 那正确吗?有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

此模型不需要明确的功能数量。
如果该类始终是数据中每个元组的最后一个元素,则可以执行以下操作:

x = [[each[:-1]] for each in data]
y = [[each[-1]] for each in data]

然后从那里继续进行。

答案 1 :(得分:0)

随机森林的想法是您拥有许多平均的简单模型。这意味着无论您拥有多少要素,您的树都不应太深。如果您有很多功能,并且使用了很多树木,则可以尝试增加深度,但是通常,对于随机森林,树木应该浅一些。实验并尝试一下!

例如:

https://medium.com/all-things-ai/in-depth-parameter-tuning-for-random-forest-d67bb7e920d

在此实验中,有+900个数据点和9个特征。他们测试了max_depth的值在1到32之间,从结果来看,我认为5左右是最好的。但这可能取决于所涉及的数据集和功能。

相关问题