機器學習第一天:
決策樹:
#include#include#include#include#includeusing namespace std;
using namespace cv;
using namespace cv::ml;
//讀取檔案中的點座標
int readfile(vector&trainedpoints, vector&trainedpointsmarkers)
int ***e = 0;
int fpoint, flabel;
point point;
while (!in.eof())
***e++;
} return 1;
}//顯示點
void showpoint(vector&trainedpoints, mat &src, mat &dst, vector&trainedpointsmarkers)
imshow("points", src);
}void showclass(ptr&model, mat &dst)
} imshow("decision tree", dst);
}int main()
vectortrainedpoints;
vectortrainedpointsmarkers;
//讀取檔案中的點座標x,y類別0或者1 例如:322 182 1
if (readfile(trainedpoints, trainedpointsmarkers) == 0)
exit(exit_failure);
//繪圖用的兩種顏色值
vectorcolors(2);
//綠色
colors[0] = vec3b(0, 255, 0);
//紅色
colors[1] = vec3b(0, 0, 255);
//繪圖用的兩個點陣矩陣
mat src, dst;
//建立480*640的3通道畫素矩陣
src.create(480, 640, cv_8uc3);
//全部是黑色
src = scalar::all(0);
//初始化目標矩陣同樣顏色
src.copyto(dst);
//繪製點
showpoint(trainedpoints, src, dst, trainedpointsmarkers);
//訓練資料
mat samples;
mat(trainedpoints).reshape(1, (int)trainedpoints.size()).convertto(samples, cv_32f);
ptrmodel = dtrees::create();
model->setmaxdepth(8);
model->setminsamplecount(2);
model->setusesurrogates(false);
model->setcvfolds(0);
model->setuse1serule(false);
model->settruncateprunedtree(false);
model->train(traindata::create(samples, row_sample, mat(trainedpointsmarkers)));
showclass(model, dst);
waitkey();
return 0;
}
執行結果圖:
部分**注釋:
vectorcolors(2);
1.vecxy:
x:取值 2,3,4,6表明由幾個維度構成。對應就是每個畫素有幾個資料構成,即channel
y:取值 b,w,s,i,f,d,依次對應
b=unsigned char,w=unsigned short,s=short,i=int,f=float,d=double.
即x所表示的每個數的型別
涉及到的知識點:畫素值的讀寫方式:
(1)at()函式:
mat img;
img.at(i, j)[0];//blue
img.at(i, j)[1];//green
img.at(i, j)[2];//red
(2)使用迭代器: 使用了迭代器,而不是使用行數和列數來遍歷,所以這兒沒有了 i 和 j 變數。
matiterator_itr, itrend;
for (itr = img.begin(), itrend = img.end(); itr != itrend; ++itr)
(3)通過資料指標:通過指標操作來訪問畫素是非常高效的,c/c++中的指標操作是不進行型別以及越界檢查的務必十分地小心。
for (int i = 0; i < img.rows; ++i)
}
2.mat(trainedpoints).reshape(1, (int)trainedpoints.size()).convertto(samples, cv_32f);
reshape函式:
在opencv中,reshape函式比較有意思,它既可以改變矩陣的通道數,又可以對矩陣元素進行序列化,非常有用的乙個函式。
函式原型:
c++: mat mat::reshape(int cn, int rows=0) const
機器學習一 機器學習概要
回歸 是指把實函式在樣本點附近加以近似的有監督的模式識別問題。對乙個或多個自變數和因變數之間關係進行建模,求解的一種統計方法。分類 是指對於指定的模式進行識別的有監督的模式識別問題。異常檢測 是指尋找輸入樣本ni 1i 1 n中所包含的異常資料的問題。常採用密度估計的方法 正常資料為靠近密度中心的資...
機器學習一
機器學習就是把無序的資料轉換成有用的資料資訊。機器學習分為監督學習以及無監督學習。監督學習適用分類和回歸為問題。監督學習必須要知道 什麼,即目標變數的分類資訊 1.1 分類 主要將例項資料劃分到合適的分類中。1.2 回歸 用於 數值型資料 無監督學習適用於資料沒有類別資訊,也沒有目標值。無監督學習中...
機器學習(一)
1.1 引言 基礎概念弄得清清楚楚,演算法作業也是信手拈來,這門課成績一定查不了!基於經驗的三個預判例子 微濕路面 感到和風 看到晚霞,預判第二天天氣很好 色澤青綠 根蒂捲縮 敲聲濁響,預判西瓜是好瓜 下足功夫 弄清概念 做好作業,預判會取得好成績。我們能做出有效的判斷,是因為我們已經積累了許多經驗...