mh演算法
『壹』 基於lbp的adaboost人臉檢測中弱分類器是怎麼生成的
Adaboost是一種迭代演算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其演算法本身是通過改變數據分布來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的准確率,來確定每個樣本的權值。將修改過權值的新數據集送給下層分類器進行訓練,最後將每次訓練得到的分類器最後融合起來,作為最後的決策分類器。使用adaboost分類器可以排除一些不必要的訓練數據特徵,並將關鍵放在關鍵的訓練數據上面。
目前,對Adaboost演算法的研究以及應用大多集中於分類問題,同時近年也出 現了一些在回歸問題上的應用。就其應用Adaboost系列主要解決了: 兩類問題、 多類單標簽問題、多類多標簽問題、大類單標簽問題,回歸問題。它用全部的訓練樣本進行學習。
該演算法其實是一個簡單的弱分類演算法提升過程,這個過程通過不斷的訓練,可以提高對數據的分類能力。整個過程如下所示:
1. 先通過對N個訓練樣本的學習得到第一個弱分類器 ;
2. 將 分錯的樣本和其他的新數據一起構成一個新的N個的訓練樣本,通過對這個樣本的學習得到第二個弱分類器 ;
3. 將 和 都分錯了的樣本加上其他的新樣本構成另一個新的N個的訓練樣本,通過對這個樣本的學習得到第三個弱分類器 ;
4. 最終經過提升的強分類器 。即某個數據被分為哪一類要通過 , ……的多數表決。
2.3 Adaboost(Adaptive Boosting)演算法
對於boosting演算法,存在兩個問題:
1. 如何調整訓練集,使得在訓練集上訓練的弱分類器得以進行;
2. 如何將訓練得到的各個弱分類器聯合起來形成強分類器。
針對以上兩個問題,adaboost演算法進行了調整:
1. 使用加權後選取的訓練數據代替隨機選取的訓練樣本,這樣將訓練的焦點集中在比較難分的訓練數據樣本上;
2. 將弱分類器聯合起來,使用加權的投票機制代替平均投票機制。讓分類效果好的弱分類器具有較大的權重,而分類效果差的分類器具有較小的權重。
Adaboost演算法是Freund和Schapire根據在線分配演算法提出的,他們詳細分析了Adaboost演算法錯誤率 的上界,以及為了使強分類器 達到錯誤率 ,演算法所需要的最多迭代次數等相關問題。與Boosting演算法不同的是,adaboost演算法不需要預先知道弱學習演算法學習正確率的下限即弱分類器的誤差,並且最後得到的強分類器的分類精度依賴於所有弱分類器的分類精度, 這樣可以深入挖掘弱分類器演算法的能力。
Adaboost演算法中不同的訓練集是通過調整每個樣本對應的權重來實現的。開始時,每個樣本對應的權重是相同的,即 其中 n 為樣本個數,在此樣本分布下訓練出一弱分類器 。對於 分類錯誤的樣本,加大其對應的權重;而對於分類正確的樣本,降低其權重,這樣分錯的樣本就被突出出來,從而得到一個新的樣本分布 。在新的樣本分布下,再次對弱分類器進行訓練,得到弱分類器。依次類推,經過 T 次循環,得到 T 個弱分類器,把這 T 個弱分類器按一定的權重疊加(boost)起來,得到最終想要的強分類器。
Adaboost演算法的具體步驟如下:
1. 給定訓練樣本集 ,其中 分別對應於正例樣本和負例樣本; 為訓練的最大循環次數;
2. 初始化樣本權重 ,即為訓練樣本的初始概率分布;
3. 第一次迭代:
(1) 訓練樣本的概率分布 下,訓練弱分類器:
(2) 計算弱分類器的錯誤率:
(3) 選取 ,使得 最小
(4) 更新樣本權重:
(5) 最終得到的強分類器:
Adaboost演算法是經過調整的Boosting演算法,其能夠對弱學習得到的弱分類器的錯誤進行適應性調整。上述演算法中迭代了 次的主循環,每一次循環根據當前的權重分布 對樣本x定一個分布P,然後對這個分布下的樣本使用若學習演算法得到一個錯誤率為 的弱分類器 ,對於這個演算法定義的弱學習演算法,對所有的 ,都有 ,而這個錯誤率的上限並不需要事先知道,實際上 。每一次迭代,都要對權重進行更新。更新的規則是:減小弱分類器分類效果較好的數據的概率,增大弱分類器分類效果較差的數據的概率。最終的分類器是 個弱分類器的加權平均。
第一部分:演算法的產生
1996年Yoav Freund在Experiments with a New Boosting Algorithm中提出了AdaBoost.M1和AdaBoost.M2兩種演算法.其中,AdaBoost.M1是我們通常所說的Discrete AdaBoost;而AdaBoost.M2是M1的泛化形式.該文的一個結論是:當弱分類器演算法使用簡單的分類方法時,boosting的效果明顯地統一地比bagging要好.當弱分類器演算法使用C4.5時,boosting比bagging較好,但是沒有前者的比較來得明顯.
文獻中記錄的.M1演算法
初始
1.獲得一組樣本(X)和它的分類(Y)和一個分類器(weaklearn).
2.賦予平均的權值分布D(i)
進入循環:T次
1. 賦予弱分類器權值D(i),使用弱分類器獲得樣本(X)到分類(Y)上的一個映射.(就是把某個X歸到某個Y類中去)
2. 計算這個映射的誤差e.e=各個歸類錯誤的樣本權值之和.如果e>1/2那麼弱分類器訓練失敗,挑出循環,訓練結束(這在二值檢測中是不會發生的,而多值的情況就要看分類器夠不夠強健了)
3. 設B = e / ( 1 - e ).用於調整權值.因為e<1/2.因此0<B<1
4. 如果某樣本分類正確,該樣本的權值就乘以B讓權值變小;如果分類錯誤,就讓該樣本的權值乘以B^-1或者不變,這樣就讓分類正確的樣本權值降低,分類錯誤的樣本權值升高,加強了對較難分類樣本的分類能力
5. 權值均衡化
循環結束
1. 最終的分類器是,當一個X進入時,遍歷所有Y,尋找使(h(x)=y的情況下,log(1/B)之和)最大者即是輸出分類y
M2相比於M1的改進是允許弱分類器輸出多個分類結果,並輸出這幾個分類結果的可能性(注意,這里不是概率)
.M2的流程是
1.獲得一組樣本(X)和它的分類(Y)和一個分類器(weaklearn).
2.對於某個樣本Xi將它的分類歸為一個正確分類Yi和其他不正確分類Yb
3.樣本權值進行如下分布首先每個樣本分到1/m的權值,然後每個不正確分類分到(1/m)/Yb的個數.也就是說樣本權值是分到了每個不正確的分類上
進入循環
1. 求每個樣本的權值,即每個樣本所有不正確的分類的權值和,再求每個樣本錯誤分類的權值,即不正確分類的權值除以該樣本的權值.最後將每個樣本的權值歸一化
2. 將樣本權值和某樣本的不正確分類的權值輸入到weaklearn,獲得弱分類器的輸出為各個分類的可能值
3. 計算偽錯誤率:公式見上
4. 更新權值
退出循環
最終的強分類器: 圖貼不出來了...
1999年, ROBERT E. SCHAPIRE和YORAM SINGER,於Machine Learning發表論文: Improved Boosting Algorithms Using Confidence-rated Predictions.提出了更具一般性的AdaBoost形式.提出了自信率以改善AdaBoost的性能.並提出了解決多標簽問題的AdaBoost.MH和AdaBoost.MR演算法,其中AdaBoost.MH演算法的一種形式又被稱為Real Boost演算法.
事實上:Discrete AdaBoost是指,弱分類器的輸出值限定在{-1,+1},和與之相應的權值調整,強分類器生成的AdaBoost演算法;Real AdaBoost是指,弱分類器輸出一個可能度,該值的范圍是整個R, 和與之相應的權值調整,強分類器生成的AdaBoost演算法。事實上,Discrete到Real的轉變體現了古典集合到模糊集合轉變的思想
至於Gentle AdaBoost.考慮到(AdaBoost對」不像」的正樣本權值調整很高,而導致了分類器的效率下降),而產生的變種演算法.它較少地強調難以分類的樣本.
『貳』 圓錐體積的計算方法
圓錐體體積=底×高÷3
長方形的周長=(長+寬)×2
正方形的周長=邊長×4
長方形的面積=長×寬
正方形的面積=邊長×邊長
三角形的面積=底×高÷2
平行四邊形的面積=底×高
梯形的面積=(上底+下底)×高÷2
直徑=半徑×2 半徑=直徑÷2
圓的周長=圓周率×直徑=
圓周率×半徑×2
圓的面積=圓周率×半徑×半徑
長方體的表面積=
(長×寬+長×高+寬×高)×2
長方體的體積 =長×寬×高
正方體的表面積=棱長×棱長×6
正方體的體積=棱長×棱長×棱長
圓柱的側面積=底面圓的周長×高
圓柱的表面積=上下底面面積+側面積
圓柱的體積=底面積×高
圓錐的體積=底面積×高÷3
長方體(正方體、圓柱體)
的體積=底面積×高
平面圖形
名稱 符號 周長C和面積S
正方形 a—邊長 C=4a
S=a2
長方形 a和b-邊長 C=2(a+b)
S=ab
三角形 a,b,c-三邊長
h-a邊上的高
s-周長的一半
A,B,C-內角
其中s=(a+b+c)/2 S=ah/2
=ab/2·sinC
=[s(s-a)(s-b)(s-c)]1/2
=a2sinBsinC/(2sinA)
四邊形 d,D-對角線長
α-對角線夾角 S=dD/2·sinα
平行四邊形 a,b-邊長
h-a邊的高
α-兩邊夾角 S=ah
=absinα
菱形 a-邊長
α-夾角
D-長對角線長
d-短對角線長 S=Dd/2
=a2sinα
梯形 a和b-上、下底長
h-高
m-中位線長 S=(a+b)h/2
=mh
圓 r-半徑
d-直徑 C=πd=2πr
S=πr2
=πd2/4
扇形 r—扇形半徑
a—圓心角度數
C=2r+2πr×(a/360)
S=πr2×(a/360)
弓形 l-弧長
b-弦長
h-矢高
r-半徑
α-圓心角的度數 S=r2/2·(πα/180-sinα)
=r2arccos[(r-h)/r] - (r-h)(2rh-h2)1/2
=παr2/360 - b/2·[r2-(b/2)2]1/2
=r(l-b)/2 + bh/2
≈2bh/3
圓環 R-外圓半徑
r-內圓半徑
D-外圓直徑
d-內圓直徑 S=π(R2-r2)
=π(D2-d2)/4
橢圓 D-長軸
d-短軸 S=πDd/4
立方圖形
名稱 符號 面積S和體積V
正方體 a-邊長 S=6a2
V=a3
長方體 a-長
b-寬
c-高 S=2(ab+ac+bc)
V=abc
稜柱 S-底面積
h-高 V=Sh
棱錐 S-底面積
h-高 V=Sh/3
稜台 S1和S2-上、下底面積
h-高 V=h[S1+S2+(S1S1)1/2]/3
擬柱體 S1-上底面積
S2-下底面積
S0-中截面積
h-高 V=h(S1+S2+4S0)/6
圓柱 r-底半徑
h-高
C—底面周長
S底—底面積
S側—側面積
S表—表面積 C=2πr
S底=πr2
S側=Ch
S表=Ch+2S底
V=S底h
=πr2h
空心圓柱 R-外圓半徑
r-內圓半徑
h-高 V=πh(R2-r2)
直圓錐 r-底半徑
h-高 V=πr2h/3
圓台 r-上底半徑
R-下底半徑
h-高 V=πh(R2+Rr+r2)/3
球 r-半徑
d-直徑 V=4/3πr3=πd2/6
球缺 h-球缺高
r-球半徑
a-球缺底半徑 V=πh(3a2+h2)/6
=πh2(3r-h)/3
a2=h(2r-h)
球台 r1和r2-球台上、下底半徑
h-高 V=πh[3(r12+r22)+h2]/6
圓環體 R-環體半徑
D-環體直徑
r-環體截面半徑
d-環體截面直徑 V=2π2Rr2
=π2Dd2/4
桶狀體 D-桶腹直徑
d-桶底直徑
h-桶高 V=πh(2D2+d2)/12
(母線是圓弧形,圓心是桶的中心)
V=πh(2D2+Dd+3d2/4)/15
『叄』 有誰用matlab做過聚類演算法
分類演算法,參數分別為G(相似度矩陣),r(鄰居門限),lambda(類門限),返回值A,一個cell數組,每個元素是一個向量,包含了一個類的所有元素。
function A=BFSN_Algorithm(G,r,lambda)
%廣度優先搜索鄰居的聚類演算法實現
%G為相似度矩陣
%r和lambda為參數
%r為鄰居門限,相似度大於r即為鄰居
%lambda門限
%未分類元素對於某類的所有元素,如果是鄰居則令X(i)=1,否則為0.i為類元素的下標
%對X求和並除以類元素個數,若此值大於lambda門限,則該未分類元素屬於這類
%打開計時器
tic
%A為聚類結果
A={};
%k為分類計數
k=1;
%n為待分類元素個數
n=size(G,1);
%構建元素向量
member=1:n;
%只要member中還有未分類的元素就繼續循環
while numel(member)~=0
%從member中取出一個元素a
a=member(1);
%新建空類A並將a送入Ak類
Ak=a;
%從member中刪除a
member(1)=[];
%掃描member中的所有元素
%queue為廣度優先搜索使用的隊列
%將a送入queue中
queue=a;
%已訪問過的元素
visited=zeros(1,n);
%如果隊列非空說明還有沒有檢驗過的鄰居
while numel(queue)~=0
%一個元素出隊
p=queue(1);
queue(1)=[];
%掃描member中所有元素
for count=1:numel(member)
%用member(count)作為待分類的元素
%p是從queue中取出,找到p的所有未訪問鄰居
if G(p,member(count))>r && visited(member(count))==0
%滿足if的member(count)是未訪問過的鄰居
%放入queue中
queue=[queue member(count)];
%member(count)已經訪問過了
visited(member(count))=1;
if sum(G(member(count),Ak)>r)/numel(Ak)>=lambda
%滿足if的元素屬於Ak類,根據lambda門限判斷
Ak=[Ak member(count)];
member(count)=-1;
end
end
end
%刪除member中已分類的元素
member(member==-1)=[];
end
%將Ak保存在cell數組A的第k個位置
A{k}=Ak;
%k指向下一個分類
k=k+1;
end
%關閉計時器
toc
由於編寫的時候比較倉促,應該有很大的優化的餘地。
plotAllClass.m
繪制已分類數據的圖形,參數:data元素數據,A分類表,一個cell數組,調用BFSN_Algorithm得到。
function plotAllClass(data,A)
%data:m行2列的矩陣,m行代表m個元素,
%第一列為每個元素的橫坐標
%第二列為每個元素的縱坐標
%A為分類列表,
%有c個元素的cell數組
%每個元素是一個向量
%包含了一個分類的所有元素在data中的行
%n=類別數
n=numel(A);
%繪圖圖案列表
style=['r*';'g*';'b*';'c*';'m*';'y*';'k*';...
'r+';'g+';'b+';'c+';'m+';'y+';'k+';...
'rs';'gs';'bs';'cs';'ms';'ys';'ks';...
'rp';'gp';'bp';'cp';'mp';'yp';'kp';...
'rh';'gh';'bh';'ch';'mh';'yh';'kh';...
'rd';'gd';'bd';'cd';'md';'yd';'kd';...
'ro';'go';'bo';'co';'mo';'yo';'ko';...
'rx';'gx';'bx';'cx';'mx';'yx';'kx';...
'rv';'gv';'bv';'cv';'mv';'yv';'kv';...
'r<';'g<';'b<';'c<';'m<';'y<';'k<';...
'r>';'g>';'b>';'c>';'m>';'y>';'k>';...
'r^';'g^';'b^';'c^';'m^';'y^';'k^';...
'r.';'g.';'b.';'c.';'m.';'y.';'k.'];
figure;
hold on;
for count=1:n
plot(data(A{count},1),data(A{count},2),style(count,:));
end
hold off;
這個函數最多能夠繪制91個類別,如果有超過91個類,函數會出錯。
show.m
包含了一個完整的流程,包括數據生成,相似度矩陣生成,分類,類別繪制。
%show.m
data=rand(200,2);
figure;
plot(data(:,1),data(:,2),'+');
G=createSimiR(data);
A=BFSN_Algorithm(G,0.95,0.95);
plotAllClass(data,A);
『肆』 mh/s和h/s哪個挖的幣多
摘要 當然是mh/s,這個要快1000000倍,100萬次哈希運算一秒
『伍』 求助,如何確定adaboost演算法的弱分類器
去博客上看看吧,網路知道這里不會圖文並茂的說,不過其實弱分類器的創建可以看看opencv的haartraning代碼,簡單說來一句話,就是講候選特徵全部篩選一遍,基於正確分類個數找到表現最好的特徵即為弱分類器,弱分類器的篩選只是第一步,後續還會有強分類器的創建,以及級聯分類器的創建,推薦你看兩篇csdn的博客:
《Opencv研讀筆記:haartraining程序之cvCreateMTStumpClassifier函數詳解(弱分類器創建)~》
《談談對Gentle Adaboost的一點理解~》
『陸』 MH演算法u<a為什麼
//#include "stdafx.h"//vc++6.0加上這一行.
#include <iostream>
#include "stdlib.h"
using namespace std;
void main(void){
int *a,i,j,L,U,n;
cout << "Enter n(int)\nn=";
cin >> n;
if((a=new int[n])==NULL){
cout << "Application memory failure\n";
exit(0);
}
for(i=0;i<n;a[i]=1+i++);
cout << "Enter L U\n";
cin >> L >> U;
for(i=0;a[i]<L;i++);
for(j=n-1;a[j]>U;j--);
for(i++;i<j;cout << a[i++] << ' ');
cout << endl;
}
『柒』 Metropolis法和Metropolis-Hastings法有什麼區別嗎各自的優點是什麼呢感謝大神
原文鏈接:http://tecdat.cn/?p=19664
MCMC是從復雜概率模型中采樣的通用技術。
蒙特卡洛
馬爾可夫鏈
Metropolis-Hastings演算法
問題
如果需要計算有復雜後驗pdf p(θ| y)的隨機變數θ的函數f(θ)的平均值或期望值。
最受歡迎的見解
1.用R語言模擬混合制排隊隨機服務排隊系統
2.R語言中使用排隊論預測等待時間
3.R語言中實現馬爾可夫鏈蒙特卡羅MCMC模型
4.R語言中的馬爾科夫機制轉換(Markov regime switching)模型
5.matlab貝葉斯隱馬爾可夫hmm模型
6.用R語言模擬混合制排隊隨機服務排隊系統
7.Python基於粒子群優化的投資組合優化
8.R語言馬爾可夫轉換模型研究交通傷亡人數事故預測
9.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用
『捌』 圓錐體積的計算方法
圓錐體體積=底×高÷3
長方形的周長=(長+寬)×2
正方形的周長=邊長×4
長方形的面積=長×寬
正方形的面積=邊長×邊長
三角形的面積=底×高÷2
平行四邊形的面積=底×高
梯形的面積=(上底+下底)×高÷2
直徑=半徑×2
半徑=直徑÷2
圓的周長=圓周率×直徑=
圓周率×半徑×2
圓的面積=圓周率×半徑×半徑
長方體的表面積=
(長×寬+長×高+寬×高)×2
長方體的體積
=長×寬×高
正方體的表面積=棱長×棱長×6
正方體的體積=棱長×棱長×棱長
圓柱的側面積=底面圓的周長×高
圓柱的表面積=上下底面面積+側面積
圓柱的體積=底面積×高
圓錐的體積=底面積×高÷3
長方體(正方體、圓柱體)
的體積=底面積×高
平面圖形
名稱
符號
周長C和面積S
正方形
a—邊長
C=4a
S=a2
長方形
a和b-邊長
C=2(a+b)
S=ab
三角形
a,b,c-三邊長
h-a邊上的高
s-周長的一半
A,B,C-內角
其中s=(a+b+c)/2
S=ah/2
=ab/2·sinC
=[s(s-a)(s-b)(s-c)]1/2
=a2sinBsinC/(2sinA)
四邊形
d,D-對角線長
α-對角線夾角
S=dD/2·sinα
平行四邊形
a,b-邊長
h-a邊的高
α-兩邊夾角
S=ah
=absinα
菱形
a-邊長
α-夾角
D-長對角線長
d-短對角線長
S=Dd/2
=a2sinα
梯形
a和b-上、下底長
h-高
m-中位線長
S=(a+b)h/2
=mh
圓
r-半徑
d-直徑
C=πd=2πr
S=πr2
=πd2/4
扇形
r—扇形半徑
a—圓心角度數
C=2r+2πr×(a/360)
S=πr2×(a/360)
弓形
l-弧長
b-弦長
h-矢高
r-半徑
α-圓心角的度數
S=r2/2·(πα/180-sinα)
=r2arccos[(r-h)/r]
-
(r-h)(2rh-h2)1/2
=παr2/360
-
b/2·[r2-(b/2)2]1/2
=r(l-b)/2
+
bh/2
≈2bh/3
圓環
R-外圓半徑
r-內圓半徑
D-外圓直徑
d-內圓直徑
S=π(R2-r2)
=π(D2-d2)/4
橢圓
D-長軸
d-短軸
S=πDd/4
立方圖形
名稱
符號
面積S和體積V
正方體
a-邊長
S=6a2
V=a3
長方體
a-長
b-寬
c-高
S=2(ab+ac+bc)
V=abc
稜柱
S-底面積
h-高
V=Sh
棱錐
S-底面積
h-高
V=Sh/3
稜台
S1和S2-上、下底面積
h-高
V=h[S1+S2+(S1S1)1/2]/3
擬柱體
S1-上底面積
S2-下底面積
S0-中截面積
h-高
V=h(S1+S2+4S0)/6
圓柱
r-底半徑
h-高
C—底面周長
S底—底面積
S側—側面積
S表—表面積
C=2πr
S底=πr2
S側=Ch
S表=Ch+2S底
V=S底h
=πr2h
空心圓柱
R-外圓半徑
r-內圓半徑
h-高
V=πh(R2-r2)
直圓錐
r-底半徑
h-高
V=πr2h/3
圓台
r-上底半徑
R-下底半徑
h-高
V=πh(R2+Rr+r2)/3
球
r-半徑
d-直徑
V=4/3πr3=πd2/6
球缺
h-球缺高
r-球半徑
a-球缺底半徑
V=πh(3a2+h2)/6
=πh2(3r-h)/3
a2=h(2r-h)
球台
r1和r2-球台上、下底半徑
h-高
V=πh[3(r12+r22)+h2]/6
圓環體
R-環體半徑
D-環體直徑
r-環體截面半徑
d-環體截面直徑
V=2π2Rr2
=π2Dd2/4
桶狀體
D-桶腹直徑
d-桶底直徑
h-桶高
V=πh(2D2+d2)/12
(母線是圓弧形,圓心是桶的中心)
V=πh(2D2+Dd+3d2/4)/15
『玖』 勻加速直線運動相同時間間隔瞬時速度演算法
第三個T的終了時刻的瞬時速度為3m/s,則v3=3aT,即3=3aT、、、、(1)
第三個T時間的位移是全部位移的5/9,所以前3T時間內的位移為x則X*5/9=3,得X=5.4m、、、、(2)
由初速度為零的勻加速直線運動位移公式得X=a(3T)^2/2即5.4=9T^2/2、、、、、、(3)
MH (1)(2)(3)得T=1.2s
『拾』 推薦演算法有哪些
推薦演算法大致可以分為三類:基於內容的推薦演算法、協同過濾推薦演算法和基於知識的推薦演算法。 基於內容的推薦演算法,原理是用戶喜歡和自己關注過的Item在內容上類似的Item,比如你看了哈利波特I,基於內容的推薦演算法發現哈利波特II-VI,與你以前觀看的在內容上面(共有很多關鍵詞)有很大關聯性,就把後者推薦給你,這種方法可以避免Item的冷啟動問題(冷啟動:如果一個Item從沒有被關注過,其他推薦演算法則很少會去推薦,但是基於內容的推薦演算法可以分析Item之間的關系,實現推薦),弊端在於推薦的Item可能會重復,典型的就是新聞推薦,如果你看了一則關於MH370的新聞,很可能推薦的新聞和你瀏覽過的,內容一致;另外一個弊端則是對於一些多媒體的推薦(比如音樂、電影、圖片等)由於很難提內容特徵,則很難進行推薦,一種解決方式則是人工給這些Item打標簽。 協同過濾演算法,原理是用戶喜歡那些具有相似興趣的用戶喜歡過的商品,比如你的朋友喜歡電影哈利波特I,那麼就會推薦給你,這是最簡單的基於用戶的協同過濾演算法(user-based collaboratIve filtering),還有一種是基於Item的協同過濾演算法(item-based collaborative filtering),這兩種方法都是將用戶的所有數據讀入到內存中進行運算的,因此成為Memory-based Collaborative Filtering,另一種則是Model-based collaborative filtering,包括Aspect Model,pLSA,LDA,聚類,SVD,Matrix Factorization等,這種方法訓練過程比較長,但是訓練完成後,推薦過程比較快。 最後一種方法是基於知識的推薦演算法,也有人將這種方法歸為基於內容的推薦,這種方法比較典型的是構建領域本體,或者是建立一定的規則,進行推薦。 混合推薦演算法,則會融合以上方法,以加權或者串聯、並聯等方式盡心融合。 當然,推薦系統還包括很多方法,其實機器學習或者數據挖掘裡面的方法,很多都可以應用在推薦系統中,比如說LR、GBDT、RF(這三種方法在一些電商推薦裡面經常用到),社交網路裡面的圖結構等,都可以說是推薦方法。