您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進行FM算法原理分析與實踐,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
簡介
FM是Steffen Rendle在2010年提出的,FM算法的核心在于特征組合,以此來減少人工參與特征組合工作。對于FM,其優勢可分以下三點:
FM能處理數據高度稀疏場景,SVM則不能;
FM具有線性的計算復雜度,而SVM依賴于support vector。
FM能夠在任意的實數特征向量中生效。
FM原理
FM的數據結構如下
FM通過不同特征的組合,生成新的含義。然而,特征組合也隨之帶來一些問題:
特征之間兩兩組合容易導致維度災難;
組合后的特征未必有效,可能存在特征冗余現象;
組合后特征樣本非常稀疏,如果原始樣本中不存在對應的組合,則無法學習參數,那么該組合就顯得無效。
雖然有這些缺點,但是也并不影響FM在廣告推薦領域的地位,每個算法都有風靡一時的過去,抱著敬畏之心的態度去學習是沒問題的。下面,來看看FM的算法原理。
我們知道,線性模型的目標函數為:
FM可以用來進行分類,為了方便,這里使用sklearn里面的iris數據集作為實驗數據,將target等于2的作為正樣本,其余作為負樣本,并采用train_test_split方法劃分訓練集與測試集,然后通過FM構建分類模型,并通過測試集驗證FM的效果。完整Demo代碼如下
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from pyfm import pylibfm
from sklearn.feature_extraction import DictVectorizer
def load_data():
"""
調用sklearn的iris數據集,篩選正負樣本并構造切分訓練測試數據集
"""
iris_data = load_iris()
X = iris_data['data']
y = iris_data['target'] == 2
data = [ {v: k for k, v in dict(zip(i, range(len(i)))).items()} for i in X]
X_train,X_test,y_train, y_test = train_test_split(data,y, test_size=0.3, random_state=0)
return X_train,X_test,y_train, y_test
X_train,X_test,y_train, y_test = load_data()
v = DictVectorizer()
X_train = v.fit_transform(X_train)
X_test = v.transform(X_test)
fm = pylibfm.FM(num_factors=2,
num_iter=200,
verbose=True,
task="classification",
initial_learning_rate=0.001,
learning_rate_schedule="optimal")
fm.fit(X_train, y_train)
y_preds = fm.predict(X_test)
y_preds_label = y_preds > 0.5
from sklearn.metrics import log_loss,accuracy_score
print ("Validation log loss: %.4f" % log_loss(y_test, y_preds))
print ("accuracy: %.4f" % accuracy_score(y_test, y_preds_label))
通過上面代碼,跑出的結果如下(注:每次實驗結果不一定相同):
Training log loss: 0.12161Validation log loss: 0.1868accuracy: 0.9778
上述內容就是如何進行FM算法原理分析與實踐,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。