import java.awt.BorderLayout;

創(chuàng)新互聯(lián)主營黃州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),黃州h5微信小程序定制開發(fā)搭建,黃州網(wǎng)站營銷推廣歡迎黃州等地區(qū)企業(yè)咨詢
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.ControllerClosedEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class JMFMediaPlayer extends JFrame implements ActionListener,
ControllerListener, ItemListener {
// JMF的播放器
Player player;
// 播放器的視頻組件和控制組件
Component vedioComponent;
Component controlComponent;
// 標(biāo)示是否是第一次打開播放器
boolean first = true;
// 標(biāo)示是否需要循環(huán)
boolean loop = false;
// 文件當(dāng)前目錄
String currentDirectory;
// 構(gòu)造方法
public JMFMediaPlayer(String title) {
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
// 用戶點擊窗口系統(tǒng)菜單的關(guān)閉按鈕
// 調(diào)用dispose以執(zhí)行windowClosed
dispose();
}
public void windowClosed(WindowEvent e){
if (player != null){
// 關(guān)閉JMF播放器對象
player.close();
}
System.exit(0);
}
});
// 創(chuàng)建播放器的菜單
JMenu fileMenu = new JMenu("文件");
JMenuItem openMemuItem = new JMenuItem("打開");
openMemuItem.addActionListener(this);
fileMenu.add(openMemuItem);
// 添加一個分割條
fileMenu.addSeparator();
// 創(chuàng)建一個復(fù)選框菜單項
JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循環(huán)", false);
loopMenuItem.addItemListener(this);
fileMenu.add(loopMenuItem);
fileMenu.addSeparator();
JMenuItem exitMemuItem = new JMenuItem("退出");
exitMemuItem.addActionListener(this);
fileMenu.add(exitMemuItem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
this.setJMenuBar(menuBar);
this.setSize(200, 200);
try {
// 設(shè)置界面的外觀,為系統(tǒng)外觀
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
e.printStackTrace();
}
this.setVisible(true);
}
/**
* 實現(xiàn)了ActionListener接口,處理組件的活動事件
*/
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
// 調(diào)用dispose以便執(zhí)行windowClosed
dispose();
return;
}
FileDialog fileDialog = new FileDialog(this, "打開媒體文件", FileDialog.LOAD);
fileDialog.setDirectory(currentDirectory);
fileDialog.setVisible(true);
// 如果用戶放棄選擇文件,則返回
if (fileDialog.getFile() == null){
return;
}
currentDirectory = fileDialog.getDirectory();
if (player != null){
// 關(guān)閉已經(jīng)存在JMF播放器對象
player.close();
}
try {
// 創(chuàng)建一個打開選擇文件的播放器
player = Manager.createPlayer(new MediaLocator("file:"
+ fileDialog.getDirectory() + fileDialog.getFile()));
} catch (java.io.IOException e2) {
System.out.println(e2);
return;
} catch (NoPlayerException e2) {
System.out.println("不能找到播放器.");
return;
}
if (player == null) {
System.out.println("無法創(chuàng)建播放器.");
return;
}
first = false;
this.setTitle(fileDialog.getFile());
// 播放器的控制事件處理
player.addControllerListener(this);
// 預(yù)讀文件內(nèi)容
player.prefetch();
}
/**
* 實現(xiàn)ControllerListener接口的方法,處理播放器的控制事件
*/
public void controllerUpdate(ControllerEvent e) {
// 調(diào)用player.close()時ControllerClosedEvent事件出現(xiàn)。
// 如果存在視覺部件,則該部件應(yīng)該拆除(為一致起見,
// 我們對控制面板部件也執(zhí)行同樣的操作)
if (e instanceof ControllerClosedEvent) {
if (vedioComponent != null) {
this.getContentPane().remove(vedioComponent);
this.vedioComponent = null;
}
if (controlComponent != null) {
this.getContentPane().remove(controlComponent);
this.controlComponent = null;
}
return;
}
// 如果是媒體文件到達尾部事件
if (e instanceof EndOfMediaEvent) {
if (loop) {
// 如果允許循環(huán),則重新開始播放
player.setMediaTime(new Time(0));
player.start();
}
return;
}
// 如果是播放器預(yù)讀事件
if (e instanceof PrefetchCompleteEvent) {
// 啟動播放器
player.start();
return;
}
// 如果是文件打開完全事件,則顯示視頻組件和控制器組件
if (e instanceof RealizeCompleteEvent) {
vedioComponent = player.getVisualComponent();
if (vedioComponent != null){
this.getContentPane().add(vedioComponent);
}
controlComponent = player.getControlPanelComponent();
if (controlComponent != null){
this.getContentPane().add(controlComponent, BorderLayout.SOUTH);
}
this.pack();
}
}
// 處理“循環(huán)”復(fù)選框菜單項的點擊事件
public void itemStateChanged(ItemEvent e) {
loop = !loop;
}
public static void main(String[] args){
new JMFMediaPlayer("JMF媒體播放器");
}
}
試試吧,我這里運行正常
我覺得用java好一些。
java是一門面向?qū)ο蟮木幊陶Z言。java語言具有功能強大和簡單易用兩個特征,具有簡單性、面向?qū)ο蟆⒎植际降忍攸c,可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
Python目前的應(yīng)用領(lǐng)域比較廣泛,目前Python的主要方向分為后端開發(fā)、數(shù)據(jù)分析、網(wǎng)絡(luò)爬蟲、機器學(xué)習(xí)等。
全文以“預(yù)測電影評分”例子展開
r(i,j)=0則表明user_j沒有對movie_i 沒有評分,
推薦系統(tǒng)要做的就是通過預(yù)測user_j對這些movie {i|r(i,j)=0}的評分來給user_j 推薦其可能會喜歡的電影預(yù)測評分較高的movie
=======================================二、基于內(nèi)容的推薦=======================================
對每個movie_i引入特征x(i)=(x1, x2),這種特征可能表明user對movie類型的偏好:浪漫or動作等
對于每個user引入一個參數(shù)theta,然后對評分矩陣的每列(對應(yīng)一個user)做線性回歸,數(shù)據(jù)是{ (x(i), y(i,j)) |r(i,j)=1,for some j all i}
像機器學(xué)習(xí)一樣,x(i)添加個1變量x(i)=(1, x1, x2)
那么對于未評分的movie_t,我們可以使用線性回歸訓(xùn)練的參數(shù)theta與對應(yīng)特征x(t)做內(nèi)積來得到其預(yù)測評分
對每個用戶都訓(xùn)練一個參數(shù)theta_j,優(yōu)化模型如下:
優(yōu)化算法:注意正則項是不約束x(i)=(1, x1, x2)中1對應(yīng)的參數(shù)theta的第一項theta0,所以k=0與k=1,2分別對待
=======================================三、協(xié)同過濾=======================================
現(xiàn)在換個角度:如果知道theta for all user j,如何來預(yù)測x(i) = (x1, x2) all i
仍然可以使用線性回歸,為訓(xùn)練每個x(i),需要評分矩陣的第i行數(shù)據(jù){ (x(i), y(i,j)) |r(i,j)=1,for some i all j}
theta_j = (0, theta1, theta2) ;theta1=5說明user_j喜歡romance類movie, theta2=5說明user_j喜歡action類movie,只能有一個等于5哦,
我覺得也可以是:theta_j = (0, 4, 1) ;喜歡romance 4 action 1.
對應(yīng)的優(yōu)化:
協(xié)同過濾:交替優(yōu)化theta與x
=========================================四、協(xié)同過濾算法=======================================
優(yōu)化:
優(yōu)化:注意去掉了theta和x的添加項
=========================================五、實現(xiàn)細節(jié)補充=======================================
實現(xiàn)細節(jié):
如果有user沒有對任何電影評分或者所有評分的電影都是0分,那么所學(xué)習(xí)到的參數(shù)是零向量,
則預(yù)測都是0值,這是不合理的。通過 將評分矩陣減去其行均值再進行線性回歸來“避免”這種情況
=========================================六、一點思考==========================================
協(xié)同過濾那塊,同時優(yōu)化theta、x,這樣得到的theta、x還有特定的意義比如:x是否還表征對影視類型的喜愛與否沒有?
回歸中,在x數(shù)據(jù)上不添加1-feature是不是因為后來引入的平均值化;如果不是,那會對結(jié)果有什么影響?
用x-feature來表征一個movie,x-feature的各分量的可解釋性;應(yīng)該會有一部分user應(yīng)為演員的緣故有一些"偏愛"。
這里,講的"基于內(nèi)容的推薦"與"協(xié)同過濾"跟以前對這兩個詞的認(rèn)識/所指內(nèi)容不同,查清楚、搞明白。
這周還會再更一篇關(guān)于此節(jié)課的算法實現(xiàn),會對上述部分問題做出回答。
本文名稱:電影推薦系統(tǒng)代碼java 簡單的電影推薦系統(tǒng)
網(wǎng)址分享:http://chinadenli.net/article26/doojicg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、品牌網(wǎng)站設(shè)計、標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)