我使用以下代碼在更改物品的價格,折扣和廣告時查找給定物品的預期銷售量。這是通過使用Accord.Net庫的ID3算法實現的。使用ID3算法預測,Accord.Net框架
namespace PnredictionSales
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable data = new DataTable("Sales prediction Example");
data.Columns.Add("RowKey");
data.Columns.Add("Brand");
data.Columns.Add("PriceRange");
data.Columns.Add("Discount");
data.Columns.Add("Advertisement");
data.Columns.Add("ExpSales");
// data.Columns.Add("Wind");
// data.Columns.Add("PlayTennis");
data.Rows.Add("D1", "Highland", "R1", "yes", "No", "B");
data.Rows.Add("D2", "Highland", "R1", "yes", "yes", "C");
data.Rows.Add("D3", "Anchor", "R1", "yes", "No", "B");
data.Rows.Add("D4", "Flora", "R2", "yes", "No", "B");
data.Rows.Add("D5", "Flora", "R3", "No", "No", "A");
data.Rows.Add("D6", "Flora", "R3", "No", "yes", "A");
data.Rows.Add("D7", "Anchor", "R3", "No", "yes", "A");
data.Rows.Add("D8", "Highland", "R2", "yes", "No", "B");
data.Rows.Add("D9", "Highland", "R3", "No", "No", "A");
data.Rows.Add("D10", "Flora", "R2", "No", "No", "B");
data.Rows.Add("D11", "Highland", "R2", "No", "yes", "B");
data.Rows.Add("D12", "Anchor", "R2", "yes", "yes", "A");
data.Rows.Add("D13", "Anchor", "R1", "No", "No", "B");
data.Rows.Add("D14", "Flora", "R2", "yes", "yes", "A");
Codification codebook = new Codification(data);
DecisionVariable[] attributes =
{
new DecisionVariable("Brand", 3), new DecisionVariable("PriceRange",3),
new DecisionVariable("Discount",2),new DecisionVariable("Advertisement",2)
};
int classCount=3; // 2 possible output values for playing tennis: yes or no
DecisionTree tree = new DecisionTree(attributes, classCount);
// Create a new instance of the ID3 algorithm
ID3Learning id3learning = new ID3Learning(tree);
// Translate our training data into integer symbols using our codebook:
DataTable symbols = codebook.Apply(data);
int[][] inputs = symbols.ToIntArray("Brand", "PriceRange","Discount","Advertisement");
int[] outputs = symbols.ToIntArray("ExpSales").GetColumn(0);
// Learn the training instances!
id3learning.Run(inputs, outputs);
int[] query = codebook.Translate("Flora","R1","yes","No");
int output = tree.Compute(query.ToDouble());
string answer = codebook.Translate("ExpSales", output); // answer will be "No".
Label1.Text = answer;
}
}
,我的問題是:
當我把任何字符串值int[] query = codebook.Translate("fff","eee","ffg","qqq");
它給了我一個輸出。我想這是什麼原因?我的方法錯了嗎? 另外我想知道爲了得到準確的結果,在數據表中組織數據的最低要求是什麼。