❶ 使用Node.js如何實現K最近鄰分類演算法
源於數據挖掘的一個作業, 這里用Node.js技術來實現一下這個機器學習中最簡單的演算法之一k-nearest-neighbor演算法(k最近鄰分類法)。
k-nearest-neighbor-classifier
還是先嚴謹的介紹下。急切學習法(eager learner)是在接受待分類的新元組之前就構造了分類模型,學習後的模型已經就緒,急著對未知的元組進行分類,所以稱為急切學習法,諸如決策樹歸納,貝葉斯分類等都是急切學習法的例子。惰性學習法(lazy learner)正好與其相反,直到給定一個待接受分類的新元組之後,才開始根據訓練元組構建分類模型,在此之前只是存儲著訓練元組,所以稱為惰性學習法,惰性學習法在分類進行時做更多的工作。
本文的knn演算法就是一種惰性學習法,它被廣泛應用於模式識別。knn基於類比學習,將未知的新元組與訓練元組進行對比,搜索模式空間,找出最接近未知元組的k個訓練元組,這里的k即是knn中的k。這k個訓練元祖就是待預測元組的k個最近鄰。
balabala了這么多,是不是某些同學想大喊一聲..speak Chinese! 還是來通俗的解釋下,然後再來看上面的理論應該會明白很多。小時候媽媽會指著各種各樣的東西教我們,這是小鴨子,這個紅的是蘋果等等,那我們哼哧哼哧的看著應答著,多次被教後再看到的時候我們自己就能認出來這些事物了。主要是因為我們在腦海像給這個蘋果貼了很多標簽一樣,不只是顏色這一個標簽,可能還有蘋果的形狀大小等等。這些標簽讓我們看到蘋果的時候不會誤認為是橘子。其實這些標簽就對應於機器學習中的特徵這一重要概念,而訓練我們識別的過程就對應於泛化這一概念。一台iphone戴了一個殼或者屏幕上有一道劃痕,我們還是能認得出來它,這對於我們人來說非常簡單,但蠢計算機就不知道怎麼做了,需要我們好好調教它,當然也不能過度調教2333,過度調教它要把其他手機也認成iphone那就不好了,其實這就叫過度泛化。
所以特徵就是提取對象的信息,泛化就是學習到隱含在這些特徵背後的規律,並對新的輸入給出合理的判斷。
我們可以看上圖,綠色的圓代表未知樣本,我們選取距離其最近的k個幾何圖形,這k個幾何圖形就是未知類型樣本的鄰居,如果k=3,我們可以看到有兩個紅色的三角形,有一個藍色的三正方形,由於紅色三角形所佔比例高,所以我們可以判斷未知樣本類型為紅色三角形。擴展到一般情況時,這里的距離就是我們根據樣本的特徵所計算出來的數值,再找出距離未知類型樣本最近的K個樣本,即可預測樣本類型。那麼求距離其實不同情況適合不同的方法,我們這里採用歐式距離。
綜上所述knn分類的關鍵點就是k的選取和距離的計算。
2. 實現
我的數據是一個xls文件,那麼我去npm搜了一下選了一個叫node-xlrd的包直接拿來用。
// node.js用來讀取xls文件的包
var xls = require('node-xlrd');
然後直接看文檔實例即可,把數據解析後插入到自己的數據結構里。
var data = [];// 將文件中的數據映射到樣本的屬性var map = ['a','b','c','d','e','f','g','h','i','j','k'];// 讀取文件
xls.open('data.xls', function(err,bk){
if(err) {console.log(err.name, err.message); return;}
var shtCount = bk.sheet.count;
for(var sIdx = 0; sIdx < shtCount; sIdx++ ){
var sht = bk.sheets[sIdx],
rCount = sht.row.count,
cCount = sht.column.count;
for(var rIdx = 0; rIdx < rCount; rIdx++){
var item = {};
for(var cIdx = 0; cIdx < cCount; cIdx++){
item[map[cIdx]] = sht.cell(rIdx,cIdx);
}
data.push(item);
}
}
// 等文件讀取完畢後 執行測試
run();
});
然後定義一個構造函數Sample表示一個樣本,這里是把剛生成的數據結構里的對象傳入,生成一個新的樣本。
// Sample表示一個樣本
var Sample = function (object) {
// 把傳過來的對象上的屬性克隆到新創建的樣本上
for (var key in object)
{
// 檢驗屬性是否屬於對象自身
if (object.hasOwnProperty(key)) {
this[key] = object[key];
}
}
}
再定義一個樣本集的構造函數
// SampleSet管理所有樣本 參數k表示KNN中的kvar SampleSet = function(k) {
this.samples = [];
this.k = k;
};
// 將樣本加入樣本數組
SampleSet.prototype.add = function(sample) {
this.samples.push(sample);
}
然後我們會在樣本的原型上定義很多方法,這樣每個樣本都可以用這些方法。
// 計算樣本間距離 採用歐式距離
Sample.prototype.measureDistances = function(a, b, c, d, e, f, g, h, i, j, k) {
for (var i in this.neighbors)
{
var neighbor = this.neighbors[i];
var a = neighbor.a - this.a;
var b = neighbor.b - this.b;
var c = neighbor.c - this.c;
var d = neighbor.d - this.d;
var e = neighbor.e - this.e;
var f = neighbor.f - this.f;
var g = neighbor.g - this.g;
var h = neighbor.h - this.h;
var i = neighbor.i - this.i;
var j = neighbor.j - this.j;
var k = neighbor.k - this.k;
// 計算歐式距離
neighbor.distance = Math.sqrt(a*a + b*b + c*c + d*d + e*e + f*f + g*g + h*h + i*i + j*j + k*k);
}
};
// 將鄰居樣本根據與預測樣本間距離排序
Sample.prototype.sortByDistance = function() {
this.neighbors.sort(function (a, b) {
return a.distance - b.distance;
});
};
// 判斷被預測樣本類別
Sample.prototype.guessType = function(k) {
// 有兩種類別 1和-1
var types = { '1': 0, '-1': 0 };
// 根據k值截取鄰居裡面前k個
for (var i in this.neighbors.slice(0, k))
{
var neighbor = this.neighbors[i];
types[neighbor.trueType] += 1;
}
// 判斷鄰居里哪個樣本類型多
if(types['1']>types['-1']){
this.type = '1';
} else {
this.type = '-1';
}
}
注意到我這里的數據有a-k共11個屬性,樣本有1和-1兩種類型,使用truetype和type來預測樣本類型和對比判斷是否分類成功。
最後是樣本集的原型上定義一個方法,該方法可以在整個樣本集里尋找未知類型的樣本,並生成他們的鄰居集,調用未知樣本原型上的方法來計算鄰居到它的距離,把所有鄰居按距離排序,最後猜測類型。
// 構建總樣本數組,包含未知類型樣本
SampleSet.prototype.determineUnknown = function() {
for (var i in this.samples)
{
// 如果發現沒有類型的樣本
if ( ! this.samples[i].type)
{
// 初始化未知樣本的鄰居
this.samples[i].neighbors = [];
// 生成鄰居集
for (var j in this.samples)
{
// 如果碰到未知樣本 跳過
if ( ! this.samples[j].type)
continue;
this.samples[i].neighbors.push( new Sample(this.samples[j]) );
}
// 計算所有鄰居與預測樣本的距離
this.samples[i].measureDistances(this.a, this.b, this.c, this.d, this.e, this.f, this.g, this.h, this.k);
// 把所有鄰居按距離排序
this.samples[i].sortByDistance();
// 猜測預測樣本類型
this.samples[i].guessType(this.k);
}
}
};
最後分別計算10倍交叉驗證和留一法交叉驗證的精度。
留一法就是每次只留下一個樣本做測試集,其它樣本做訓練集。
K倍交叉驗證將所有樣本分成K份,一般均分。取一份作為測試樣本,剩餘K-1份作為訓練樣本。這個過程重復K次,最後的平均測試結果可以衡量模型的性能。
k倍驗證時定義了個方法先把數組打亂隨機擺放。
// helper函數 將數組里的元素隨機擺放
function ruffle(array) {
array.sort(function (a, b) {
return Math.random() - 0.5;
})
}
剩餘測試代碼好寫,這里就不貼了。
測試結果為
用餘弦距離等計算方式可能精度會更高。
3. 總結
knn演算法非常簡單,但卻能在很多關鍵的地方發揮作用並且效果非常好。缺點就是進行分類時要掃描所有訓練樣本得到距離,訓練集大的話會很慢。
可以用這個最簡單的分類演算法來入高大上的ML的門,會有點小小的成就感。
❷ 如何通過圖像的灰度值矩陣判斷物體真假matlab
如何通過圖像的灰度值矩陣判斷物體真假matlab,彩色圖像:每個像兆畝素帆猜沒由R、G、B三個分量表示,每個通道取值范圍0~255。(通一個彩色圖像是由三頁組成的,分別是R、G、B,每一頁都是一個二維矩陣)
灰度圖像:每個像素只有一個采樣顏色的圖像,這類圖像通常顯態納示為從最暗黑色到最亮的白色的灰度。灰度值分布在0~255之間。
二值圖像(黑白圖像):每個像素點只有兩種可能,0和1.0代表黑色,1代表白色。數據類型通常為1個二進制位。
❸ 維度規約(特徵的提取和組合)
介紹
第一部分 參數方法——類密度模型參數估計
第二部分 監督學習——分類(基於似然的方法)
第三部分 監督學習——襪段雹分類(基於判別式的方法)(參數方法——判別式參數估計)
第四部分 監督學習——回歸
第五部分 監督學習——關聯規則
第六部分 維度規約(特徵的提取和組合)
第七部分 半參數方法
第八部分 非監督學習——聚類
第九部分 非參數方法——密度估計
第十部分 非參數方法——決策樹實現的判別式
第十一部分 多層感知器——非參數估計器
第十二部分 局部模型
第十三部分 支持向量機與核機器
第十四部分 隱馬爾科夫模型
第十五部分 參數的貝葉斯估計
第十六部分 集成學習——組合多學告帆習器
第十七部分 增強學習
第十八部分 機器學習實驗
第十九部分 特徵工程與數據預處理
任何分類和回歸方法的復雜度都依賴於輸入的數量。我們需要輸入數據含有可供決策的信息。理想情況下,不需要將特徵選擇或特徵提取作為一個單獨的過程。並且有效的方法,應該能夠利用任何必要的特徵,並丟棄不相關的特徵。
但將降維作為一個單獨的預處理步驟,有如下一些原因:
1、在大多數機器學習演算法中,復雜度依賴於輸入的維度d及樣本規模N。為了減少存儲及計算時間,需要考慮降低維度。同時降低d也降低了檢驗演算法的復雜度。
2、去除不必要的採集數據,
3、更簡單的模型可以在小數據集上更魯棒。(《 監督學習——分類(基於判別式的方法)(參數方法——判別式參數估計) 》多元情況部分中,提到過高維輸入x可能存在奇異的協方差矩陣估計)
4、當數據可以用較少的特徵解釋時,有利於理解數據背後的過程,並提取知識,利於解釋。
降低維度主要有兩類方法:特徵選擇、特徵提取。
特徵選擇 ——從d個維中找到 提供最多信息的k個維度,丟棄其他(d-k)個維度的數據。
特徵提取 ——找到k個維度的新集合,這k個維度是原來d個維度的組合。這些方法可以是監督的或者非監督的。如同為 線性投影方法 的 主成分分析(PCA) 和 線性判別分析(LDA) 分別是非監督的和監督的。線性維度歸約以外,還有非線性維度歸約方法,如 等距特徵映射(Isomap) 、 局部線性嵌入(LLE) 、 拉普拉斯特徵映射 。
1、主成分計算
在投影方法中,我們要找到的是從原d維輸入空間到新的 維空間的、具有最小信息損失的映射。
x在方向omega 上的投影為 。
PCA是一種非監督方法,其最大化的准則是方差,主成分是這樣的 ,樣本投影在 上後最分散。同時為了保證解唯一,要求 。
如果 且 ,則 。尋找 使得 在約束 下最大化。寫成拉格朗日問題,有:
關於 求導並令它等於0,有 ,也就是 。 是 的特徵向量, 是對應的特徵值。因為我們想最大化方差 ,特徵值就等於方差,所以選擇最大化特徵值的特徵向量。
因此,主成分是輸入樣本協方差矩陣的具有最大特徵值的特徵向量。
第二個主成分 也應該最大化方差 ,具有單位長度,並且與 正交(也就是與 不相關)。則對第二個主成分有:
關於 求導並令它等於0,有 。左乘 ,得 。
其中 。
於是得 , 。表明 是 得具有第二大特徵值的特徵向量。類似地,其他維可由遞減特徵值的特徵向量給出。並且,因為 是對稱的,所以對於任意兩個不同的特徵值,對應的特徵向量是正交的。
最後有降維後的數據 ,其中W的k列是Sigma 的估計S的k個主特徵向量。 投影前從 x 中減燃彎去樣本均值 m ,將數據原點中心化 。
等同地,我們想找到一個矩陣W,使得 (不失一般性,x已經中心化), ,其中D是對角矩陣,既我們希望得到不相關的z_i。令S是D的估計, 矩陣C的第 i 列是S的規范化特徵向量 ,則 。且有
其中D是對角矩陣,對角元素是特徵值lambda_i。這稱為S的譜分解。C是正交的,有 。所以可以令 , 是對角矩陣。
2、 選取主成分
得到了各主成分 ,根據特徵值大小,可統計方差比例 ,取貢獻了一定比例以上的前k個主成分。或可通過忽略小於平均輸入方差的特徵值對應的特徵向量,來得到k個主成分。
PCA解釋方差,但對離群點很敏感。少量離群點會明顯影響方差,從而對特徵向量產生很大影響。一般會通過計算數據點的馬氏距離,丟棄孤立的離群點,保證估計的魯棒性。
因子分析(FA)同PCA一樣時非監督的。假設存在不可觀測的潛在因子集合 ,它們組合成樣本實例 。與PCA方法相反,FA的目的時通過較少的因子 z 刻畫觀測變數 x 之間的依賴性。也就是相較於PCA的 ,FA試圖找到 z 使得其構成 x : 。
在PCA中,挑選大特徵值的特徵向量構成W,損失了沒有被選中的特徵值對應的方差。但FA雖也在一個更小的維空間重構數據,但沒有丟失信息。
X是 的樣本數據矩陣,協方差矩陣是 的。如果X已中心化,具有零均值,則協方差矩陣等於 。PCA使用 的特徵向量,譜分解是 ,C的各列是 的特徵向量,D是對應特徵值構成的 對角矩陣。
如果我們想將維度歸約到 ,在PCA中,假定W中的特徵向量按特徵值大小排序,取W的前k列( 具有最大特徵值的k個特徵向量),我們記這些特徵向量為 ,對應特徵值為 。從原始輸入空間映射到新的k維空間:
對任意 ,有
因此, 是 的具有特徵值 的特徵向量。注意, 是 的,而 是 的。
其譜分解為 ,其中 是 的, 的列是 的特徵向量 (單位化後的), 是對應特徵值構成的對角矩陣。 的N維特徵向量是新的特徵嵌入(FE)空間的坐標。
求得了 ,可直接得到 (PCA所做的):
通常 ,這是使用PCA來計算 更簡單。而有時 ,則計算 容易一些。
對於PCA,得到的是投影向量,可通過取x與特徵向量的點積,將任意一個x投影到新的k維空間。但線性嵌入沒有學習得到投影映射的模型,每當有一個新的數據加入,都需要重新進行計算。
假設N個點,知道每對點間距離 (不需知道這些點的坐標,維度,也不必知道如何計算這些距離)。多維定位(MDS)是把這些點映射到低維空間的方法,使它們在低維空間重得歐式距離 盡可能接近原始空間中的給定距離 。
可以使用MDS進行維度歸約,通過d維 x 空間的逐對歐氏距離,將距離作為MDS的輸入。如有樣本 ,其中 ,在運用MDS方法時,不需知道 x 的具體坐標。對每兩個點 r 和 s。它們之間的平方歐氏距離為
,其中 。
將數據中心化並假定 。由此有 。
並記 ,得到
由上述各等式可得:
故通過已知的 ,計算得到了 ,也就是得到了 。也就是線性嵌入的結果。通過B的特徵向量得到各實例在新空間中的坐標。
PCA、FA與MDS做了同樣的事情,當d<N時,PCA代價更低。在相關性矩陣上而不是協方差矩陣上做PCA等價於用標准歐氏距離來做MDS,其中每個變數都有單位方差。而MDS
上面介紹的MDS用線性映射的方法,將原空間上的數據,線性地映射到新空間:
MDS中也可以使用非線性的映射,這被稱為Sammon映射。映射中的標准化誤差稱為Sammon應力:
可對g使用任何回歸方法,訓練 最小化訓練數據 X 上的Sammon應力。
對於分類的情況,可在距離的定義中包含類信息,如 ,其中 是r和s所屬類之間的距離。應該主觀地提供這個類間距離, 用交叉驗證優化。
線性判別分析(LDA)是一種用於分類問題的維度歸約的 監督 方法。
兩類問題 ,考慮兩個類 , 的樣本,希望找到由向量 定義的方向,使得當數據投影到 上時,來自兩個類的樣本盡可能分開。
是 到 上的投影。 和 是 類樣本在投影前和投影後的均值。注意這里 ,而 。設樣本 ,對 有 , 有 。
, 。
來自兩個類的樣本投影後在均值周圍的散布是
, 。
投影後,為了使各類盡可能地分開,則希望均值金盡可能遠離,並且類實例散布在盡可能小的范圍里。既, 大, 小。費希爾線性判別式是這樣的 ,最大化 。其中
其中 是類間散度矩陣, 是類內散布的和。從而
,關於 求 的導數,並令其為0,得
其中 是常數,有 ,c是常數。這里關注的是 的方向,故c取1。
對於 K>2 個類,我們希望找到矩陣W,使得 ,其中z是k維的,矩陣W是 矩陣。 的類內散布矩陣是
,其中對 有 ,否則為0。
總的類內散布矩陣是 。
類間散布矩陣是 ,其中 。
投影後類間散布矩陣為 ,類內散布矩陣是 ,都是 矩陣。
同樣地,我們希望類間散布更大,類內散布更小,故最大化 ,其解為 的最大的特徵向量。注意, 是K個秩為1的矩陣 的和,並且可知它們之中最多隻有K-1個是獨立,因此S_B的秩最大隻有K-1。同2類一樣,數據在 上的投影自然是降維的。
為了使用LDA,需要類內散布矩陣 可逆。如果不可逆,可先用PCA消除奇異性,在運用LDA。同時,應該確保PCA 沒有把維度降得太低,使得LDA沒有多少事可做。
相比於PCA只注重總體的方差,LDA的監督性注重類間散布 。
前面所介紹的方法,都需要數據落在一個線性子空間中。但這一前提並不總是成立。等距特徵映射(Isomap)與下面的局部線性嵌入和拉普拉斯特徵映射,不同於上面的方法,考慮的是 流形(mainfold) 上的輸入數據,且為 非監督方法 。關注的局部數據的逐對距離,而不是全局相似性。
Isomap使用所有數據點對之間的測地距離(沿流形的距離)。對輸入空間中靠近的鄰近點,可以使用歐氏距離。對距離遠的點,用沿流形的各點之間的距離和來近似。
視兩個點 r 和 s 是連接的,如果 或 s 是 r 的n個最近鄰之一,則其rs邊長是 。對任意兩個節點 r 和s, 是它們之間最短路徑的長度。然後在 可上應用MDS。
與使用MDS一樣,由於使用了線性嵌入來將N個數據放到一個低維空間,所以沒有學習一個從原空間到低維空間的映射函數。
局部線性嵌入(LLE)從局部線性擬合來發現全局非線性結構。其基本思想是,流形的每個局部可以線性地近似。每個點可通過其鄰近點的線性加權和給出。
原數據 和它的近鄰 可使用最小二乘法找到重構權重 。其最小化誤差 ,
且滿足 。
LLE試圖用重構權重 反應數據的固有幾何性質,期望這種性質在映射後的新空間中也能保持。因此,LLE方法下一步保持 固定,來取新坐標 z 的值。
與Isomap一樣,LLE的解是N個點的新坐標,不學習映射。對此有兩種解決方案:
1、使用相同的思想,對新元素 ,在原始 d 維空間中找出 的n個近鄰(原數據集中的實例,已映射到新空間),並且首先學習最小化 的重構權重 。然後使用它們在新的k維空間中重構 。
2、使用映射後的結果 作為訓練集,可訓練任意回歸器 。例如多層感知器,作為從 到 映射的近似。
Isomap和LLE中,全局非線性組織 通過整合部分重疊的局部線性約束而得到。
考慮數據實例 和它們的投影 。假定實例點對之間相似度為 , 可在原始空間中計算。r和s相等時 取最大值,並且它是對稱的 。
這里的目標函數是 ,意義在於 相似的實例應該放在新空間中的鄰近位置,而不相似的實例在新空間中的位置相對不關心。
計算 ,MDS方法中使用點積 。但在拉普拉斯特徵映射中,同Isomap和LLE一樣,只關注局部相似性。通過r 和s 之間的某個最大 距離,或者通過k最近鄰來定義鄰域,鄰域之外,設置 。鄰域之內,對於用戶指定的某個 值,使用高斯核把歐氏距離轉換為相似度:
定義了 後,最小化目標函數
簡寫為 ,其中D是 的 對角矩陣,B是 構成的 矩陣。
定義 圖拉普拉斯(graph Laplacian) 。目標最小化 。約束 。與特徵嵌入一樣,得到新空間中的坐標 z。其解是L的特徵向量,又因為我們要最小化 ,所以選則最小特徵值的特徵向量作為解(注意忽略0特徵值)。
拉普拉斯特徵映射是一種特徵嵌入方法。也就是直接在新空間中得到坐標,而沒有可用於新實例的映射模型。
拉普拉斯特徵映射使用特徵嵌入的思想,並保持逐對相似性。相同的思想也用於核機器,核機器中逐對相似性由核函數給出。
核機器的運用,將非線性空間的問題變為新的線性空間上的問題。具體對核方法的介紹見《 支持向量機與核機器 》一節。
對於維度規約方法,也可以運用核方法。對於處理線性子空間的方法,不能直接運用在流形問題上。核版本的方法可以解決這個問題,核機器內在地將原問題映射到新的線性子空間中,再在線空間上採用線性方法。核PCA使用核矩陣的特徵向量核特徵值,這對應於在基函數映射後的 的空間上做線性維度規約。而在MDS中,核值則作為相似度值。`
❹ 為什麼k臨近演算法不能處理特徵很多的數據集
機器學習中常常要用到分類演算法,在諸多的分類演算法中有一種演算法名為k-近鄰演算法,也稱為kNN演算法。
一、kNN演算法的工作原理
二、適用情況
三、演算法實例及講解
---1.收集數據
---2.准備數據
---3.設計演算法分析數據
---4.測試演算法
一、kNN演算法的工作原理
官方解釋:存在一個樣本數據集,也稱作訓練樣本集,並且樣本中每個數據都存在標簽,即我們知道樣本集中每一數據與所屬分類的對應關系,輸入沒有標簽的新數據後,將新數據的每個特徵與樣本集中的數據對應的特徵進行比較,然後演算法提取樣本集中特徵最相似的數據(最近鄰)的分類標簽。一般來說,我們只選擇樣本集中前k個最相似的數據,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數,最後,選擇k個最相似的數據中出現次數最多的分類,作為新數據的分類。
我的理解:k-近鄰演算法就是根據「新數據的分類取決於它的鄰居」進行的,比如鄰居中大多數都是退伍軍人,那麼這個人也極有可能是退伍軍人。而演算法的目的就是先找出它的鄰居,然後分析這幾位鄰居大多數的分類,極有可能就是它本省的分類。
二、適用情況
優點:精度高,對異常數據不敏感(你的類別是由鄰居中的大多數決定的,一個異常鄰居並不能影響太大),無數據輸入假定;
缺點:計算發雜度高(需要計算新的數據點與樣本集中每個數據的「距離」,以判斷是否是前k個鄰居),空間復雜度高(巨大的矩陣);
適用數據范圍:數值型(目標變數可以從無限的數值集合中取值)和標稱型(目標變數只有在有限目標集中取值)。
❺ 如何計算sift每幅圖像提取多少特徵點
一、特徵點(角點)匹配
圖像匹配能夠應用的場合非常多,如目標跟蹤,檢測,識別,圖像拼接等,而角點匹配最核心的技術就要屬角點匹配了,所謂角點匹配是指尋找兩幅圖像之間的特徵像素點的對應關系,從而確定兩幅圖像的位置關系。
角點匹配可以分為以下四個步驟:
1、提取檢測子:在兩張待匹配的圖像中尋找那些最容易識別的像素點(角點),比如紋理豐富的物體邊緣點等。
2、提取描述子:對於檢測出的角點,用一些數學上的特徵對其進行描述,如梯度直方圖,局部隨機二值特徵等。檢測子和描述子的常用提取方法有:sift,harris,surf,fast,agast,brisk,freak,brisk,brief/orb等。
3、匹配:通過各個角點的描述子來判斷它們在兩張圖像中的對應關系,常用方法如 flann等。
4、消噪:去除錯誤匹配的外點,保留正確的匹配點。常用方法有KDTREE,BBF,Ransac,GTM等。
二、SIFT匹配方法的提出
為了排除因為圖像遮擋和背景混亂而產生的無匹配關系的關鍵點,SIFT的作者Lowe提出了比較最近鄰距離與次近鄰距離的SIFT匹配方式:取一幅圖像中的一個SIFT關鍵點,並找出其與另一幅圖像中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離得到的比率ratio少於某個閾值T,則接受這一對匹配點。因為對於錯誤匹配,由於特徵空間的高維性,相似的距離可能有大量其他的錯誤匹配,從而它的ratio值比較高。顯然降低這個比例閾值T,SIFT匹配點數目會減少,但更加穩定,反之亦然。
Lowe推薦ratio的閾值為0.8,但作者對大量任意存在尺度、旋轉和亮度變化的兩幅圖片進行匹配,結果表明ratio取值在0. 4~0. 6 之間最佳,小於0. 4的很少有匹配點,大於0. 6的則存在大量錯誤匹配點,所以建議ratio的取值原則如下:
ratio=0. 4:對於准確度要求高的匹配;
ratio=0. 6:對於匹配點數目要求比較多的匹配;
ratio=0. 5:一般情況下。
三、常見的SIFT匹配代碼
1、vlfeat中sift toolbox中的vl_ubcmatch.c使用的是普通的歐氏距離進行匹配(該SIFT代碼貢獻自Andrea
Vedaldi)。
2、Lowe的C++代碼中使用的是歐氏距離,但是在matlab代碼中為了加速計算,使用的是向量夾角來近似歐氏距離:先將128維SIFT特徵向量歸一化為單位向量(每個數除以平方和的平方根),然後點乘來得到向量夾角的餘弦值,最後利用反餘弦(acos函數)求取向量夾角。實驗證明Lowe的辦法正確率和耗時都很不錯。
同樣,也可以採用knnsearch函數求最近點和次近點:knnsearch採用euclidean距離時得到的結果與lowe採用的近似方法結果幾乎一致,正好印證了模擬歐氏距離的效果。
3、Rob Hess的OpenSIFT採用了KDTREE來對匹配進行優化。
4、CSDN大神v_JULY_v實現了KDTREE+BBF對SIFT匹配的優化和消除錯誤匹配:從K近鄰演算法、距離度量談到KD樹、SIFT+BBF演算法
- 結構之法 演算法之道 - 博客頻道 - CSDN.NET。
5、OpenCV中features2d實現的SIFT匹配有多種matcher:VectorDescriptorMatcher,BFMatcher(Brute-force descriptor matcher),FernDescriptorMatcher,OneWayDescriptorMatcher,FlannBasedMatcher 等等。目前只知道採用knnsearch,提供了多種距離度量方式,具體區別不懂。
❻ 特徵工程中數據預處理方法總結
特徵工程
「巧婦難為無米之炊」,在機器學習中,數據和特徵便是「米」,而模型和演算法則是「巧婦」。沒有充足的數據和合適的特徵,再強大的模型也無法擬合出滿意的結果。因此,對於機器學習的問題,常說的一句話是數據和特徵決定了結果的上限,而模型和演算法則是在優化過程中逐步接近這個上限。所以,特徵的處理在整個機器學習過程中佔有舉足輕重的地位,對特徵的處理過程被稱為特徵工程。特徵工程是對原始數據進行一系列的工程處理,將其提煉為特徵,作為輸入工演算法和模型使用。
特徵工程又包含了Data PreProcessing(數據預處理)、Feature Extraction(特徵提取)、Feature Selection(特徵選擇)和Feature construction(特徵構造)等子問題,而數據預處理又包括了數據清洗和特徵預處理等子問題。本文用作總結數據預處理的一系列方法。
1、無量綱化
(1)什麼是無量綱化
為了消除數據特徵之間的量綱影響,我們需要對特徵進行歸一化和標准化處理,使得不同指標之間具有可比性。例如:分析一個人的身高和體重對健康的影響,如果使用米和千克作為單位,那麼身高和體重會處於不同的數值范圍內,體重的數值在量上要遠大於身高,而如果不對其做處理直接用的情況下分析結果顯然會更依賴於數值差別較大的體重特徵。因此,為了得到更為准確的結果,就需要對特徵進行歸一化和標准化處理,使各項指標處於同一數量級,以便進行分析。
(2)無量綱化方法
無量綱化通常也被稱為歸一化或標准化,是因為歸一化和標准化是無量綱化的兩個主要方法
1)歸一化
歸一化是對原始數據進行線性變換, 使結果映射到[0, 1]的范圍, 實現對原始數據的等比縮放。 最常用對的是Min-Max Scaling歸一化方法(也叫極差變換法),公式如下 :
其中X為原始數據, Xmax、Xmin分別為數據最大值和最小值。最值歸一化的使用范圍是特徵的分布具有明顯邊界的,受outlier的影響比較大。
除此之外,常用的歸一化方法有原始值比最大值。
2)標准化
標准化會將原始數據映射到均值為0、 標准差為1的分布派慎上。常用的方法是零均值標准化(Z-Score Normalization)。 具體來說, 假設原始特徵的均值為μ、 標准差為σ, 那麼歸一化公式定義為 :
零均值標准化適用於數據中沒有明顯的邊界,有可能存在極端數據值的情況。
3)不同的無量綱方法的適用范圍
無量綱化避免了不同量綱的選取對距離計算產生的巨大影響。但是,歸一化和標准化適用於不同的場景,在分類、聚類演算法中,需要使用距離來度量相似性的時候、或者使用PCA技術進行降維的時候,標准化方法表現更好。在不涉及距離度量、協方差計算、數據不符合正太分布的時候,可以使用歸一化方法。比如圖像處理中,將RGB圖像轉換為灰度圖像後將其值限定在[0 255]的范圍。
(3)無量綱化的作用和適用模型
1)作用
無量綱化的作用除了可以使分析結果不明顯傾向於差異化較大的特徵外,另一個重要作用是在隨機梯度下降演算法中,如果對特徵進行了無量綱化處理,會在相同的學習率的情況下減少差異較大的特徵的迭代次數,更快找到最優解。例如,假設有兩種數告叢值型特徵,x1x1的取值范圍為 [0, 10],x2x2的取值范圍為[0, 3]。則在未歸一化和歸一化數據的梯度下降過程分別如下圖:
由圖可以看出,在學習速率相同的情況下,x1相比與x2需要較多的迭代才能找到最優解。但是,如果將 x1 和 x2都映射到到相同的數值區間後, 優化目標的等值圖會變成圓形。x1和 x2 的更新速度變得更為一致, 容易更快地通過梯度下降找到最優解。
2)適用演算法
機器學習中,並不是所有的模型都需要對特徵進行無量綱化處理。比如概率模型並不需要,因為它們不關心變數的值,而是關心變數的分布和變數之間的條件概率。但是,像線性回歸、邏輯回歸和支持向量機以及神經網路模型等則就需要提前進行特徵的無量綱化。從塵友敬另一個角度來看,通過梯度下降法求解的模型通常需要無量綱化。否則,像決策樹在求解過程中,主要依據特徵值的信息增益比等信息,而這些信息跟特徵是否經過歸一化等無量綱化處理是無關的,因此決策數不要求對特徵進行無量綱化處理。
2、類別型特徵編碼
類別型特徵的值表現為類別變數,類別型變數,也被稱為定性變數(categorical variable)。比如性別、省份、學歷、產品等級等。這類變數的取值通常是用文字而非數字來表示。在機器學習中,除了決策樹族的演算法能直接接受類別型特徵作為輸入,對於支持向量機,邏輯回歸等模型來說,必須對其做一定的處理,轉換成可靠的數值特徵才能正確運行。類別型特徵的處理方法有:
(1)序列編碼(ordinal encoding)
一般處理類別間具有大小關系的數據,例如期末成績的 [A, B, C, D] 四擋可以直接轉化為 [0, 1, 2, 3]。在轉化後,依然保持類別之間的順序關系。
(2)獨熱編碼(one-hot encoding)
序列編碼潛在的定義了類別之間的距離具有相同的含義。以成績為例,兩個人之間,得分A與B的成績差,和B與C的成績差,在進行預測時,是完全等價的,由於 [A, B, C, D] 直觀上與成績正相關,使用序列編碼不會帶來太大的損失。然而在處理像血型這樣的類別特徵時,如果將 [A, B, AB, O] 直接編碼成 [1, 2, 3, 4],顯然A與B和B與AB之間的距離,並不具有相同的含義,甚至是完全抽象的無法理解的意義,此時,序列編碼就不適用了。因此,便出現了獨熱編碼,獨熱編碼將類別特徵用一組比特位來表示,每一位代表一個可能的類別,如果該變數不能一次稱為多個類別,那麼該組中只有一位可以是1。
對於類別取值較多的情況下適用獨熱編碼需要注意以下問題:
1)適用稀疏向量來節省空間。在獨熱編碼下,特徵向量只有某一維取值為1,其他位置取值均為0。因此,可以利用向量的稀疏表示有效節省空間,並且目前大部分的演算法均接受稀疏向量形式的輸入。
2)配合特徵選擇來降低維度。高維度特徵會帶來幾方面的問題,一是在K近鄰演算法中,高維空間下兩點之間的距離很難得到有效的衡量;二是在邏輯回歸模型中,參數的數量會隨著維度的增加而增高,容易引起過擬合問題;三是通常只有部分維度是對分類、預測有幫助,因此可以考慮配合特徵選擇來降低維度。
(3)啞變數(mmy encoding)
啞變數是獨熱編碼的一種形式,onehot編碼的問題是它允許k個自由度,其中變數本身只需要k-1。虛擬編碼通過僅適用表示中的k-1個特徵來消除額外的自由度。
3、數值型特徵離散化
離散化是數值型特徵非常重要的一個處理,其實就是要將數值型數據轉化成類別型數據。連續值的取值空間可能是無窮的,為了便於表示和在模型中處理,需要對連續值特徵進行離散化處理。
(1)無監督方法
1)自定義離散化,根據業務經驗或者常識等自行設定劃分的區間,然後將原始數據歸類到各個區間中。
2)等距化方法,按照相同寬度將數據分成幾等份,其缺點是受到異常值的影響比較大。
3)等頻化方法,將數據分成幾等份,每等份數據裡面的個數是一樣的。
4)聚類離散化
5)二值化方法,設定一個閾值,大於閾值的賦值為1,小於等於閾值的賦值為0。
(2)有監督方法
1)卡方法,自底向上的(即基於合並的)數據離散化方法。它依賴於卡方檢驗:具有最小卡方值的相鄰區間合並在一起,直到滿足確定的停止准則。其基本思想是,對於精確的離散化,相對類頻率在一個區間內應當完全一致。因此,如果兩個相鄰的區間具有非常類似的類分布,則這兩個區間可以合並;否則,它們應當保持分開。而低卡方值表明它們具有相似的類分布。
2)最小熵法,需要使總熵值達到最小,也就是使分箱能夠最大限度地區分因變數的各類別。數據集的熵越低,說明數據之間的差異越小,最小熵劃分就是為了使每箱中的數據具有最好的相似性。給定箱的個數,如果考慮所有可能的分箱情況,最小熵方法得到的箱應該是具有最小熵的分箱。
4、缺失值處理方法
(1)直接刪除
如果在數據集中,只有幾條數據的某幾列中存在缺失值,那麼可以直接把這幾條數據刪除。
(2)均值插補
數據的屬性分為定距型和非定距型。如果缺失值是定距型的,就以該屬性存在值的平均值來插補缺失的值;如果缺失值是非定距型的,就根據統計學中的眾數原理,用該屬性的眾數(即出現頻率最高的值)來補齊缺失的值。
(3)利用同類均值插補
同均值插補的方法都屬於單值插補,不同的是,它用層次聚類模型預測缺失變數的類型,再以該類型的均值插補。
(4)極大似然估計
在缺失類型為隨機缺失的條件下,假設模型對於完整的樣本是正確的,那麼通過觀測數據的邊際分布可以對未知參數進行極大似然估計(Little and Rubin)。
(5)多重插補
多重插補的思想來源於貝葉斯估計,認為待插補的值是隨機的,它的值來自於已觀測到的值。具體實踐上通常是估計出待插補的值,然後再加上不同的雜訊,形成多組可選插補值。根據某種選擇依據,選取最合適的插補值。
❼ 大數據演算法:分類演算法
KNN演算法,即K近鄰(K Nearest Neighbour)演算法,是一種基本的分類演算法。其主要原理是:對於一個需要分類的數據,將其和一組已經分類標注好的樣本集合進行比較,得到距離最近的K個樣本,K個樣本最多歸屬的類別,就是這個需要分類數據的類別。下面我給你畫了一個KNN演算法的原理圖。
圖中,紅藍綠三種顏色的點為樣本數據,分屬三種類別 、 、 。對於待分類點 ,計算和它距離最近的5個點(即K為5),這5個點最多歸屬的類別為 (4個點歸屬 ,1個點歸屬 ),那麼 的類別被分類為 。
KNN的演算法流程也非常簡單,請看下面的流程圖。
KNN演算法是一種非常簡單實用的分類演算法,可用於各種分類的場景,比如新聞分類、商品分類等,甚至可用於簡單的文字識別。對於新聞分類,可以提前對若干新聞進行人工標注,標好新聞類別,計算好特徵向量。對於一篇未分類的新聞,計算其特徵向量後,跟所有已標注新聞進行距離計算,然後進一步利用KNN演算法進行自動分類。
讀到這你肯定會問,如何計算數據的距離呢?如何獲得新聞的特徵向量呢?
KNN演算法的關鍵是要比較需要分類的數據與樣本數據之間的距離,這在機器學習中通常的做法是:提取數據的特徵值,根據特徵值組成一個n維實數向量空間(這個空間也被稱作特徵空間),然後計算向量之間的空間距離。空間之間的距離計算方法有很多種,常用的有歐氏距離、餘弦距離等。
對於數據 和 ,若其特徵空間為n維實數向量空間 ,即 , ,則其歐氏距離計算公式為
這個歐式距離公式其實我們在初中的時候就學過,平面幾何和立體幾何里兩個點之間的距離,也是用這個公式計算出來的,只是平面幾何(二維幾何)里的n=2,立體幾何(三維幾何)里的n=3,而機器學習需要面對的每個數據都可能有n維的維度,即每個數據有n個特徵值。但是不管特徵值n是多少,兩個數據之間的空間距離的計算公式還是這個歐氏計算公式。大多數機器學習演算法都需要計算數據之間的距離,因此掌握數據的距離計算公式是掌握機器學習演算法的基礎。
歐氏距離是最常用的數據計算公式,但是在文本數據以及用戶評價數據的機器學習中,更常用的距離計算方法是餘弦相似度。
餘弦相似度的值越接近1表示其越相似,越接近0表示其差異越大,使用餘弦相似度可以消除數據的某些冗餘信息,某些情況下更貼近數據的本質。我舉個簡單的例子,比如兩篇文章的特徵值都是:「大數據」「機器學習」和「極客時間」,A文章的特徵向量為(3, 3, 3),即這三個詞出現次數都是3;B文章的特徵向量為(6, 6, 6),即這三個詞出現次數都是6。如果光看特徵向量,這兩個向量差別很大,如果用歐氏距離計算確實也很大,但是這兩篇文章其實非常相似,只是篇幅不同而已,它們的餘弦相似度為1,表示非常相似。
餘弦相似度其實是計算向量的夾角,而歐氏距離公式是計算空間距離。餘弦相似度更關注數據的相似性,比如兩個用戶給兩件商品的打分分別是(3, 3)和(4, 4),那麼兩個用戶對兩件商品的喜好是相似的,這種情況下,餘弦相似度比歐氏距離更合理。
我們知道了機器學習的演算法需要計算距離,而計算距離需要還知道數據的特徵向量,因此提取數據的特徵向量是機器學習工程師們的重要工作,有時候甚至是最重要的工作。不同的數據以及不同的應用場景需要提取不同的特徵值,我們以比較常見的文本數據為例,看看如何提取文本特徵向量。
文本數據的特徵值就是提取文本關鍵詞,TF-IDF演算法是比較常用且直觀的一種文本關鍵詞提取演算法。這種演算法是由TF和IDF兩部分構成。
TF是詞頻(Term Frequency),表示某個單詞在文檔中出現的頻率,一個單詞在一個文檔中出現的越頻繁,TF值越高。
詞頻:
IDF是逆文檔頻率(Inverse Document Frequency),表示這個單詞在所有文檔中的稀缺程度,越少文檔出現這個詞,IDF值越高。
逆文檔頻率:
TF與IDF的乘積就是TF-IDF。
所以如果一個詞在某一個文檔中頻繁出現,但在所有文檔中卻很少出現,那麼這個詞很可能就是這個文檔的關鍵詞。比如一篇關於原子能的技術文章,「核裂變」「放射性」「半衰期」等詞彙會在這篇文檔中頻繁出現,即TF很高;但是在所有文檔中出現的頻率卻比較低,即IDF也比較高。因此這幾個詞的TF-IDF值就會很高,就可能是這篇文檔的關鍵詞。如果這是一篇關於中國原子能的文章,也許「中國」這個詞也會頻繁出現,即TF也很高,但是「中國」也在很多文檔中出現,那麼IDF就會比較低,最後「中國」這個詞的TF-IDF就很低,不會成為這個文檔的關鍵詞。
提取出關鍵詞以後,就可以利用關鍵詞的詞頻構造特徵向量,比如上面例子關於原子能的文章,「核裂變」「放射性」「半衰期」這三個詞是特徵值,分別出現次數為12、9、4。那麼這篇文章的特徵向量就是(12, 9, 4),再利用前面提到的空間距離計算公式計算與其他文檔的距離,結合KNN演算法就可以實現文檔的自動分類。
貝葉斯公式是一種基於條件概率的分類演算法,如果我們已經知道A和B的發生概率,並且知道了B發生情況下A發生的概率,可以用貝葉斯公式計算A發生的情況下B發生的概率。事實上,我們可以根據A的情況,即輸入數據,判斷B的概率,即B的可能性,進而進行分類。
舉個例子:假設一所學校里男生佔60%,女生佔40%。男生總是穿長褲,女生則一半穿長褲一半穿裙子。假設你走在校園中,迎面走來一個穿長褲的學生,你能夠推斷出這個穿長褲學生是男生的概率是多少嗎?
答案是75%,具體演算法是:
這個演算法就利用了貝葉斯公式,貝葉斯公式的寫法是:
意思是A發生的條件下B發生的概率,等於B發生的條件下A發生的概率,乘以B發生的概率,除以A發生的概率。還是上面這個例子,如果我問你迎面走來穿裙子的學生是女生的概率是多少。同樣帶入貝葉斯公式,可以計算出是女生的概率為100%。其實這個結果我們根據常識也能推斷出來,但是很多時候,常識受各種因素的干擾,會出現偏差。比如有人看到一篇博士生給初中學歷老闆打工的新聞,就感嘆讀書無用。事實上,只是少見多怪,樣本量太少而已。而大量數據的統計規律則能准確反映事物的分類概率。
貝葉斯分類的一個典型的應用場合是垃圾郵件分類,通過對樣本郵件的統計,我們知道每個詞在郵件中出現的概率 ,我們也知道正常郵件概率 和垃圾郵件的概率 ,還可以統計出垃圾郵件中各個詞的出現概率 ,那麼現在一封新郵件到來,我們就可以根據郵件中出現的詞,計算 ,即得到這些詞出現情況下,郵件為垃圾郵件的概率,進而判斷郵件是否為垃圾郵件。
現實中,貝葉斯公式等號右邊的概率,我們可以通過對大數據的統計獲得,當有新的數據到來的時候,我們就可以帶入上面的貝葉斯公式計算其概率。而如果我們設定概率超過某個值就認為其會發生,那麼我們就對這個數據進行了分類和預測,具體過程如下圖所示。
訓練樣本就是我們的原始數據,有時候原始數據並不包含我們想要計算的維度數據,比如我們想用貝葉斯公式自動分類垃圾郵件,那麼首先要對原始郵件進行標注,需要標注哪些郵件是正常郵件、哪些郵件是垃圾郵件。這一類需要對數據進行標注才能進行的機器學習訓練也叫作有監督的機器學習。
❽ 07_推薦系統演算法詳解
基於人口統計學的推薦與用戶畫像、基於內容的推薦、基於協同過濾的推薦。
1、基於人口統計學的推薦機制( Demographic-based Recommendation)是一種最易於實現的推薦方法,它只是簡單的根據系統用戶的基本信息發現用戶的相關程度,然後將相似用戶喜愛的其他物品推薦給當前用戶。
2、對於沒有明確含義的用戶信息(比如登錄時間、地域等上下文信息),可以通過聚類等手段,給用戶打上分類標簽。
3、對於特定標簽的用戶,又可以根據預設的規則(知識)或者模型,推薦出對應的物品。
4、用戶信息標簽化的過程一般又稱為 用戶畫像 ( User Profiling)。
(1)用戶畫像( User Profile)就是企業通過收集與分析消費者社會屬性、生活習慣、消費行為等主要信息的數據之後,完美地抽象出一個用戶的商業全貌作是企業應用大數據技術的基本方式。
(2)用戶畫像為企業提供了足夠的信息基礎,能夠幫助企業快速找到精準用戶群體以及用戶需求等更為廣泛的反饋信息。
(3)作為大數據的根基,它完美地抽象出一個用戶的信息全貌,為進一步精準、快速地分析用戶行為習慣、消費習慣等重要信息,提供了足夠的數據基礎。
1、 Content- based Recommendations(CB)根據推薦物品或內容的元數據,發現物品的相關性,再基於用戶過去的喜好記錄,為用戶推薦相似的物品。
2、通過抽取物品內在或者外在的特徵值,實現相似度計算。比如一個電影,有導演、演員、用戶標簽UGC、用戶評論、時長、風格等等,都可以算是特徵。
3、將用戶(user)個人信息的特徵(基於喜好記錄或是預設興趣標簽),和物品(item)的特徵相匹配,就能得到用戶對物品感興趣的程度。在一些電影、音樂、圖書的社交網站有很成功的應用,有些網站還請專業的人員對物品進行基因編碼/打標簽(PGC)。
4、 相似度計算:
5、對於物品的特徵提取——打標簽(tag)
- 專家標簽(PGC)
- 用戶自定義標簽(UGC)
- 降維分析數據,提取隱語義標簽(LFM)
對於文本信息的特徵提取——關鍵詞
- 分詞、語義處理和情感分析(NLP)
- 潛在語義分析(LSA)
6、 基於內容推薦系統的高層次結構
7、 特徵工程
(1)特徵( feature):數據中抽取出來的對結果預測有用的信息。
特徵的個數就是數據的觀測維度。
特徵工程是使用專業背景知識和技巧處理數據,使得特徵能在機器學習演算法上發揮更好的作用的過程。
特徵工程一般包括特徵清洗(采樣、清洗異常樣本),特徵處理和特徵選擇。
特徵按照不同的數據類型分類,有不同的特徵處理方法:數值型、類別型、時間型、統計型。
(2)數值型特徵處理
用連續數值表示當前維度特徵,通常會對數值型特徵進行數學上的處理,主要的做法是歸一化和離散化。
* 幅度調整歸一化:
特徵與特徵之間應該是平等的,區別應該體現在 特徵內部 。
例如房屋價格和住房面積的幅度是不同的,房屋價格可能在3000000~15000000(萬)之間,而住房面積在40-300(平方米)之間,那麼明明是平等的兩個特徵,輸入到相同的模型中後由於本身的幅值不同導致產生的效果不同,這是不合理的
* 數值型特徵處理——離散化
離散化的兩種方式:等步長——簡單但不一定有效;等頻——min -> 25% -> 75% -> max
兩種方法對比:
等頻的離散化方法很精準,但需要每次都對數據分布進行一遍從新計算,因為昨天用戶在淘寶上買東西的價格分布和今天不一定相同,因此昨天做等頻的切分點可能並不適用,而線上最需要避免的就是不固定,需要現場計算,所以昨天訓練出的模型今天不一定能使用。
等頻不固定,但很精準,等步長是固定的,非常簡單,因此兩者在工業上都有應用。
(3) 類別型特徵處理
類別型數據本身沒有大小關系,需要將它們編碼為數字,但它們之間不能有預先設定的大小關系,因此既要做到公平,又要區分開它們,那麼直接開辟多個空間。
One-Hot編碼/啞變數:One-Hot編碼/啞變數所做的就是將類別型數據平行地展開,也就是說,經過One-Hot編碼啞變數後,這個特徵的空間會膨脹。
(4) 時間型特徵處理
時間型特徵既可以做連續值,又可以看做離散值。
連續值:持續時間(網頁瀏覽時長);間隔時間(上一次購買/點擊離現在的時間間隔)。
離散值:一天中哪個時間段;一周中的星期幾;一年中哪個月/星期;工作日/周末。
(5) 統計型特徵處理
加減平均:商品價格高於平均價格多少,用戶在某個品類下消費超過多少。
分位線:商品屬於售出商品價格的分位線處。
次序性:商品處於熱門商品第幾位。
比例類:電商中商品的好/中/差評比例。
8、 推薦系統常見反饋數據 :
9、 基於UGC的推薦
用戶用標簽來描述對物品的看法,所以用戶生成標簽(UGC)是聯系用戶和物品的紐帶,也是反應用戶興趣的重要數據源。
一個用戶標簽行為的數據集一般由一個三元組(用戶,物品,標簽)的集合表示,其中一條記錄(u,i,b)表示用戶u給物品打上了標簽b。
一個最簡單的演算法:
- 統計每個用戶最常用的標簽
- 對於每個標簽,統計被打過這個標簽次數最多的物品
- 對於一個用戶,首先找到他常用的標簽,然後找到具有這些標簽的最熱門的物品,推薦給他
- 所以用戶u對物品i的興趣公式為 ,其中 使用戶u打過標簽b的次數, 是物品i被打過標簽b的次數。
簡單演算法中直接將用戶打出標簽的次數和物品得到的標簽次數相乘,可以簡單地表現出用戶對物品某個特徵的興趣。
這種方法傾向於給熱門標簽(誰都會給的標簽,如「大片」、「搞笑」等)、熱門物品(打標簽人數最多)比較大的權重,如果一個熱門物品同時對應著熱門標簽,那它就會「霸榜」,推薦的個性化、新穎度就會降低。
類似的問題,出現在新聞內容的關鍵字提取中。比如以下新聞中,哪個關鍵字應該獲得更高的權重?
10、 TF-IDF:詞頻逆文檔頻率 ( Term Frequency- -Inverse Document Frequency,TF-DF)是一種用於資訊檢索與文本挖掘的常用加權技術。
TFDF是一種統計方法,用以評估一個字詞對於一個文件集或一個語料庫中的其中份文件的重要程度。字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。
TFIDF=TF IDF
TF-IDF的主要思想是 :如果某個詞或短語在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。
TF-DF加權的各種形式常被搜索引擎應用,作為文件與用戶查詢之間相關程度的度量或評級。
詞頻( Term Frequency,TF) :指的是某一個給定的詞語在該文件中出現的頻率。這個數字是對詞數的歸一化,以防止偏向更長的文件。(同一個詞語在長文件里可能會比短文件有更高的詞數,而不管該詞語重要與否。) ,其中 表示詞語 i 在文檔 j 中出現的頻率, 表示 i 在 j 中出現的次數, 表示文檔 j 的總詞數。
逆向文件頻率( Inverse Document Frequency,IDF) :是一個詞語普遍重要性的度量,某一特定詞語的IDF,可以由總文檔數目除以包含該詞語之文檔的數目,再將得到的商取對數得到 ,其中 表示詞語 i 在文檔集中的逆文檔頻率,N表示文檔集中的文檔總數, 表示文檔集中包含了詞語 i 的文檔數。
(11) TF-IDF對基於UGC推薦的改進 : ,為了避免熱門標簽和熱門物品獲得更多的權重,我們需要對「熱門進行懲罰。
借鑒TF-IDF的思想,以一個物品的所有標簽作為「文檔」,標簽作為「詞語」,從而計算標簽的「詞頻」(在物品所有標簽中的頻率)和「逆文檔頻率」(在其它物品標簽中普遍出現的頻率)。
由於「物品i的所有標簽」 應該對標簽權重沒有影響,而 「所有標簽總數」 N 對於所有標簽是一定的,所以這兩項可以略去。在簡單演算法的基礎上,直接加入對熱門標簽和熱門物品的懲罰項: ,其中, 記錄了標簽 b 被多少個不同的用戶使用過, 記錄了物品 i 被多少個不同的用戶打過標簽。
(一)協同過濾(Collaborative Filtering, CF)
1、基於協同過濾(CF)的推薦:基於內容( Content based,CB)主要利用的是用戶評價過的物品的內容特徵,而CF方法還可以利用其他用戶評分過的物品內容。
CF可以解決CB的一些局限:
- 物品內容不完全或者難以獲得時,依然可以通過其他用戶的反饋給出推薦。
- CF基於用戶之間對物品的評價質量,避免了CB僅依賴內容可能造成的對物品質量判斷的干。
- CF推薦不受內容限制,只要其他類似用戶給出了對不同物品的興趣,CF就可以給用戶推薦出內容差異很大的物品(但有某種內在聯系)
分為兩類:基於近鄰和基於模型。
2、基於近鄰的推薦系統:根據的是相同「口碑」准則。是否應該給Cary推薦《泰坦尼克號》?
(二)基於近鄰的協同過濾
1、 基於用戶(User-CF): 基於用戶的協同過濾推薦的基本原理是,根據所有用戶對物品的偏好,發現與當前用戶口味和偏好相似的「鄰居」用戶群,並推薦近鄰所偏好的物品。
在一般的應用中是採用計算「K-近鄰」的演算法;基於這K個鄰居的歷史偏好信息,為當前用戶進行推薦。
User-CF和基於人口統計學的推薦機制:
- 兩者都是計算用戶的相似度,並基於相似的「鄰居」用戶群計算推薦。
- 它們所不同的是如何計算用戶的相似度:基於人口統計學的機制只考慮用戶本身的特徵,而基於用戶的協同過濾機制可是在用戶的歷史偏好的數據上計算用戶的相似度,它的基本假設是,喜歡類似物品的用戶可能有相同或者相似的口味和偏好。
2、基於物品(Item-CF):基於項目的協同過濾推薦的基本原理與基於用戶的類似,只是使用所有用戶對物品的偏好,發現物品和物品之間的相似度,然後根據用戶的歷史偏好信息,將類似的物品推薦給用戶。
Item-CF和基於內容(CB)的推薦
- 其實都是基於物品相似度預測推薦,只是相似度計算的方法不一樣,前者是從用戶歷史的偏好推斷,而後者是基於物品本身的屬性特徵信息。
同樣是協同過濾,在基於用戶和基於項目兩個策略中應該如何選擇呢?
- 電商、電影、音樂網站,用戶數量遠大於物品數量。
- 新聞網站,物品(新聞文本)數量可能大於用戶數量。
3、 User-CF和Item-CF的比較
同樣是協同過濾,在User-CF和ltem-CF兩個策略中應該如何選擇呢?
Item-CF應用場景
- 基於物品的協同過濾( Item-CF ) 推薦機制是 Amazon在基於用戶的機制上改良的一種策略因為在大部分的Web站點中,物品的個數是遠遠小於用戶的數量的,而且物品的個數和相似度相對比較穩定,同時基於物品的機制比基於用戶的實時性更好一些,所以 Item-CF 成為了目前推薦策略的主流。
User-CF應用場景
- 設想一下在一些新聞推薦系統中,也許物品一一也就是新聞的個數可能大於用戶的個數,而且新聞的更新程度也有很快,所以它的相似度依然不穩定,這時用 User-cf可能效果更好。
所以,推薦策略的選擇其實和具體的應用場景有很大的關系。
4、 基於協同過濾的推薦優缺點
(1)基於協同過濾的推薦機制的優點:
它不需要對物品或者用戶進行嚴格的建模,而且不要求對物品特徵的描述是機器可理解的,所以這種方法也是領域無關的。
這種方法計算出來的推薦是開放的,可以共用他人的經驗,很好的支持用戶發現潛在的興趣偏好。
(2)存在的問題
方法的核心是基於歷史數據,所以對新物品和新用戶都有「冷啟動」的問題。
推薦的效果依賴於用戶歷史好數據的多少和准確性。
在大部分的實現中,用戶歷史偏好是用稀疏矩陣進行存儲的,而稀疏矩陣上的計算有些明顯的問題,包括可能少部分人的錯誤偏好會對推薦的准確度有很大的影響等等。
對於一些特殊品味的用戶不能給予很好的推薦。
(三)基於模型的協同過濾
1、基本思想
(1)用戶具有一定的特徵,決定著他的偏好選擇
(2)物品具有一定的特徵,影響著用戶需是否選擇它。
(3)用戶之所以選擇某一個商品,是因為用戶特徵與物品特徵相互匹配。
基於這種思想,模型的建立相當於從行為數據中提取特徵,給用戶和物品同時打上「標簽」;這和基於人口統計學的用戶標簽、基於內容方法的物品標簽本質是一樣的,都是特徵的提取和匹配。
有顯性特徵時(比如用戶標簽、物品分類標簽)我們可以直接匹配做出推薦;沒有時,可以根據已有的偏好數據,去發據出隱藏的特徵,這需要用到隱語義模型(LFM)。
2、基於模型的協同過濾推薦,就是基於樣本的用戶偏好信息,訓練一個推薦模型,然後根據實時的用戶喜好的信息進行預測新物品的得分,計算推薦
基於近鄰的推薦和基於模型的推薦
- 基於近鄰的推薦是在預測時直接使用已有的用戶偏好數據,通過近鄰數據來預測對新物品的偏好(類似分類)
- 而基於模型的方法,是要使用這些偏好數據來訓練模型,找到內在規律,再用模型來做預測(類似回歸)
訓練模型時,可以基於標簽內容來提取物品特徵,也可以讓模型去發據物品的潛在特徵;這樣的模型被稱為 隱語義模型 ( Latent Factor Model,LFM)。
(1)隱語義模型(LFM):用隱語義模型來進行協同過濾的目標:
- 揭示隱藏的特徵,這些特徵能夠解釋為什麼給出對應的預測評分
- 這類特徵可能是無法直接用語言解釋描述的,事實上我們並不需要知道,類似「玄學」
通過矩陣分解進行降維分析
- 協同過濾演算法非常依賴歷史數據,而一般的推薦系統中,偏好數據又往往是稀疏的;這就需要對原始數據做降維處理。
- 分解之後的矩陣,就代表了用戶和物品的隱藏特徵
隱語義模型的實例:基於概率的隱語義分析(pLSA)、隱式迪利克雷分布模型(LDA)、矩陣因子分解模型(基於奇異值分解的模型,SVD)
(2)LFM降維方法——矩陣因子分解
(3)LFM的進一步理解
我們可以認為,用戶之所以給電影打出這樣的分數,是有內在原因的,我們可以挖掘出影響用戶打分的隱藏因素,進而根據未評分電影與這些隱藏因素的關聯度,決定此未評分電影的預測評分。
應該有一些隱藏的因素,影響用戶的打分,比如電影:演員、題材、年代…甚至不定是人直接可以理解的隱藏因子。
找到隱藏因子,可以對user和Iiem進行關聯(找到是由於什麼使得user喜歡/不喜歡此Item,什麼會決定user喜歡/不喜歡此item),就可以推測用戶是否會喜歡某一部未看過的電影。
(4)矩陣因子分解
(5)模型的求解——損失函數
(6)模型的求解演算法——ALS
現在,矩陣因子分解的問題已經轉化成了一個標準的優化問題,需要求解P、Q,使目標損失函數取最小值。
最小化過程的求解,一般採用隨機梯度下降演算法或者交替最小二乘法來實現交替最小二乘法( Alternating Least Squares,ALS)
ALS的思想是,由於兩個矩陣P和Q都未知,且通過矩陣乘法耦合在一起,為了使它們解耦,可以先固定Q,把P當作變數,通過損失函數最小化求出P,這就是一個經典的最小二乘問題;再反過來固定求得的P,把Q當作變數,求解出Q:如此交替執行,直到誤差滿足閱值條件,或者到達迭代上限。
(7)梯度下降演算法
❾ 哪種機器學習演算法可以進行一維數據的擴充
您好,一維數據擴充可以使用多種機器學習演算法,比如最常用的K近鄰演算法(KNN)、支持向量機(SVM)、決策樹(DT)、貝葉斯演算法(Bayes)、神經網路(NN)等。K近鄰演算法是一種基於實例的學習方法,它的工作原理是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。支持向量機是一種有監督的學習模型,它的工作原理是:在特徵空間中找到一個最優的超平面,使得超平面上的樣本點和超平面之間的距離最小,從而實現對數據的分類。決策樹是一種基於規則的學習模型,它的工作原理是:通過對數據的分析,構建一棵決策樹,以汪告此來決定數據的分類。貝葉斯演算法是一種基於概率的學習模型,它的鋒陵陵工作原理是:根據貝葉斯定理,通過計算概率來決定數據的分類。神經銀戚網路是一種模擬人腦神經元的網路,它的工作原理是:通過訓練神經網路,讓神經網路學習數據的特徵,以此來決定數據的分類。
❿ KNN演算法,k近鄰
K最近鄰(k-Nearest Neighbour,KNN)分類演算法,是一個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。