機器學習(一)

2021-10-01 08:51:19 字數 3003 閱讀 2280

機器學習第一天:

決策樹:

#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 引言 基礎概念弄得清清楚楚,演算法作業也是信手拈來,這門課成績一定查不了!基於經驗的三個預判例子 微濕路面 感到和風 看到晚霞,預判第二天天氣很好 色澤青綠 根蒂捲縮 敲聲濁響,預判西瓜是好瓜 下足功夫 弄清概念 做好作業,預判會取得好成績。我們能做出有效的判斷,是因為我們已經積累了許多經驗...