機器學習如何解決問題

原文 http://tech.meituan.com/mt-mlinaction-how-to-ml.html
前言

前言

隨著大數據時代的到來,機器學習成為解決問題的一種重要且關鍵的工具。不管是工業界還是學術界,機器學習都是一個炙手可熱的方向,但是學術界和工業界對機器學習的研究各有側重,學術界側重于對機器學習理論的研究,工業界側重于如何用機器學習來解決實際問題。我們結合美團在機器學習上的實踐,進行一 個實戰(InAction)系列的介紹(帶“機器學習InAction系列”標簽的文章),介紹機器學習在解決工業界問題的實戰中所需的基本技術、經驗和技巧。本文主要結合實際問題,概要地介紹機器學習解決實際問題的整個流程,包括對問題建模、準備訓練數據、抽取特征、訓練模型和優化模型等關鍵環節。

下文分為1)機器學習的概述,2)對問題建模,3)準備訓練數據,4)抽取特征,5)訓練模型,6)優化模型,7)總結 共7個章節進行介紹。

機器學習的概述:

什么是機器學習?

隨著機器學習在實際工業領域中不斷獲得應用,這個詞已經被賦予了各種不同含義。在本文中的“機器學習”含義與wikipedia上的解釋比較契 合,如下:Machine learning is a scientific discipline that deals with the construction and study of algorithms that can learn from data.

機器學習可以分為無監督學習(unsupervised learning)和有監督學習(supervised learning),在工業界中,有監督學習是更常見和更有價值的方式,下文中主要以這種方式展開介紹。如下圖中所示,有監督的機器學習在解決實際問題 時,有兩個流程,一個是離線訓練流程(藍色箭頭),包含數據篩選和清洗、特征抽取、模型訓練和優化模型等環節;另一個流程則是應用流程(綠色箭頭),對需要預估的數據,抽取特征,應用離線訓練得到的模型進行預估,獲得預估值作用在實際產品中。在這兩個流程中,離線訓練是最有技術挑戰的工作(在線預估流程很多工作可以復用離線訓練流程的工作),所以下文主要介紹離線訓練流程。
這里寫圖片描述

實例詳解機器學習如何解決問題

什么是模型(model)?

模型,是機器學習中的一個重要概念,簡單的講,指特征空間到輸出空間的映射;一般由模型的假設函數和參數w組成(下面公式就是Logistic Regression模型的一種表達,在訓練模型的章節做稍詳細的解釋);一個模型的假設空間(hypothesis space),指給定模型所有可能w對應的輸出空間組成的集合。工業界常用的模型有Logistic Regression(簡稱LR)、Gradient Boosting Decision Tree(簡稱GBDT)、Support Vector Machine(簡稱SVM)、Deep Neural Network(簡稱DNN)等。

這asd里寫圖片描述
實例詳解機器學習如何解決問題
模型訓練就是基于訓練數據,獲得一組參數w,使得特定目標最優,即獲得了特征空間到輸出空間的最優映射,具體怎么實現,見訓練模型章節。

為什么要用機器學習解決問題?

目前處于大數據時代,到處都有成T成P的數據,簡單規則處理難以發揮這些數據的價值;
廉價的高性能計算,使得基于大規模數據的學習時間和代價降低;
廉價的大規模存儲,使得能夠更快地和代價更小地處理大規模數據;
存在大量高價值的問題,使得花大量精力用機器學習解決問題后,能獲得豐厚收益。

機器學習應該用于解決什么問題?

目標問題需要價值巨大,因為機器學習解決問題有一定的代價;
目標問題有大量數據可用,有大量數據才能使機器學習比較好地解決問題(相對于簡單規則或人工);
目標問題由多種因素(特征)決定,機器學習解決問題的優勢才能體現(相對于簡單規則或人工);
目標問題需要持續優化,因為機器學習可以基于數據自我學習和迭代,持續地發揮價值。

對問題建模

本文以DEAL(團購單)交易額預估問題為例(就是預估一個給定DEAL一段時間內賣了多少錢),介紹使用機器學習如何解決問題。首先需要:

收集問題的資料,理解問題,成為這個問題的專家;
拆解問題,簡化問題,將問題轉化機器可預估的問題。
深入理解和分析DEAL交易額后,可以將它分解為如下圖的幾個問題:
這里寫圖片描述
實例詳解機器學習如何解決問題

單個模型?多個模型?如何來選擇?

按照上圖進行拆解后,預估DEAL交易額就有2種可能模式,一種是直接預估交易額;另一種是預估各子問題,如建立一個用戶數模型和建立一個訪購率模型(訪問這個DEAL的用戶會購買的單子數),再基于這些子問題的預估值計算交易額。

不同方式有不同優缺點,具體如下:
模式 缺點 優點
單模型 1. 預估難度大2. 風險比較高 1. 理論上可以獲得最優預估(實際上很難)2. 一次解決問題
多模型 1. 可能產生積累誤差2. 訓練和應用成本高 1. 單個子模型更容易實現比較準地預估2. 可以調整子模型的融合方式,以達到最佳效果
選擇哪種模式?

1)問題可預估的難度,難度大,則考慮用多模型;

2)問題本身的重要性,問題很重要,則考慮用多模型;

3)多個模型的關系是否明確,關系明確,則可以用多模型。

如果采用多模型,如何融合?可以根據問題的特點和要求進行線性融合,或進行復雜的融合。以本文問題為例,至少可以有如下兩種:
這里寫圖片描述
實例詳解機器學習如何解決問題

模型選擇

對于DEAL交易額這個問題,我們認為直接預估難度很大,希望拆成子問題進行預估,即多模型模式。那樣就需要建立用戶數模型和訪購率模型,因為機器學習解決問題的方式類似,下文只以訪購率模型為例。要解決訪購率問題,首先要選擇模型,我們有如下的一些考慮:

主要考慮

1)選擇與業務目標一致的模型;

2)選擇與訓練數據和特征相符的模型。

訓練數據少,High Level特征多,則使用“復雜”的非線性模型(流行的GBDT、Random Forest等);
訓練數據很大量,Low Level特征多,則使用“簡單”的線性模型(流行的LR、Linear-SVM等)。
補充考慮

1)當前模型是否被工業界廣泛使用;

2)當前模型是否有比較成熟的開源工具包(公司內或公司外);

3)當前工具包能夠的處理數據量能否滿足要求;

4)自己對當前模型理論是否了解,是否之前用過該模型解決問題。

為實際問題選擇模型,需要轉化問題的業務目標為模型評價目標,轉化模型評價目標為模型優化目標;根據業務的不同目標,選擇合適的模型,具體關系如下:
這里寫圖片描述

實例詳解機器學習如何解決問題

通常來講,預估真實數值(回歸)、大小順序(排序)、目標所在的正確區間(分類)的難度從大到小,根據應用所需,盡可能選擇難度小的目標進行。 對于訪購率預估的應用目標來說,我們至少需要知道大小順序或真實數值,所以我們可以選擇Area Under Curve(AUC)或Mean Absolute Error(MAE)作為評估目標,以Maximum likelihood為模型損失函數(即優化目標)。綜上所述,我們選擇spark版本 GBDT或LR,主要基于如下考慮:

1)可以解決排序或回歸問題;

2)我們自己實現了算法,經常使用,效果很好;

3)支持海量數據;

4)工業界廣泛使用。

準備訓練數據

深入理解問題,針對問題選擇了相應的模型后,接下來則需要準備數據;數據是機器學習解決問題的根本,數據選擇不對,則問題不可能被解決,所以準備訓練數據需要格外的小心和注意:

注意點:

待解決問題的數據本身的分布盡量一致;
訓練集/測試集分布與線上預測環境的數據分布盡可能一致,這里的分布是指(x,y)的分布,不僅僅是y的分布;
y數據噪音盡可能小,盡量剔除y有噪音的數據;
非必要不做采樣,采樣常常可能使實際數據分布發生變化,但是如果數據太大無法訓練或者正負比例嚴重失調(如超過100:1),則需要采樣解決。

常見問題及解決辦法

待解決問題的數據分布不一致:
1)訪購率問題中DEAL數據可能差異很大,如美食DEAL和酒店DEAL的影響因素或表現很不一致,需要做特別處理;要么對數據提前歸一化,要么將分布不一致因素作為特征,要么對各類別DEAL單獨訓練模型。
數據分布變化了:
1)用半年前的數據訓練模型,用來預測當前數據,因為數據分布隨著時間可能變化了,效果可能很差。盡量用近期的數據訓練,來預測當前數據,歷史的數據可以做降權用到模型,或做transfer learning。
y數據有噪音:
1)在建立CTR模型時,將用戶沒有看到的Item作為負例,這些Item是因為用戶沒有看到才沒有被點擊,不一定是用戶不喜歡而沒有被點擊,所以這些 Item是有噪音的。可以采用一些簡單規則,剔除這些噪音負例,如采用skip-above思想,即用戶點過的Item之上,沒有點過的Item作為負例 (假設用戶是從上往下瀏覽Item)。
采樣方法有偏,沒有覆蓋整個集合:
1)訪購率問題中,如果只取只有一個門店的DEAL進行預估,則對于多門店的DEAL無法很好預估。應該保證一個門店的和多個門店的DEAL數據都有;
2)無客觀數據的二分類問題,用規則來獲得正/負例,規則對正/負例的覆蓋不全面。應該隨機抽樣數據,進行人工標注,以確保抽樣數據和實際數據分布一致。

訪購率問題的訓練數據

收集N個月的DEAL數據(x)及相應訪購率(y);
收集最近N個月,剔除節假日等非常規時間 (保持分布一致);
只收集在線時長>T 且 訪問用戶數 > U的DEAL (減少y的噪音);
考慮DEAL銷量生命周期 (保持分布一致);
考慮不同城市、不同商圈、不同品類的差別 (保持分布一致)。

抽取特征

完成數據篩選和清洗后,就需要對數據抽取特征,就是完成輸入空間到特征空間的轉換(見下圖)。針對線性模型或非線性模型需要進行不同特征抽取,線性模型需要更多特征抽取工作和技巧,而非線性模型對特征抽取要求相對較低。
這里寫圖片描述

實例詳解機器學習如何解決問題

通常,特征可以分為High Level與Low Level,High Level指含義比較泛的特征,Low Level指含義比較特定的特征,舉例來說:

DEAL A1屬于POIA,人均50以下,訪購率高;
DEAL A2屬于POIA,人均50以上,訪購率高;
DEAL B1屬于POIB,人均50以下,訪購率高;
DEAL B2屬于POIB,人均50以上,訪購率底;
基于上面的數據,可以抽到兩種特征,POI(門店)或人均消費;POI特征則是Low Level特征,人均消費則是High Level特征;假設模型通過學習,獲得如下預估:

如果DEALx 屬于POIA(Low Level feature),訪購率高;
如果DEALx 人均50以下(High Level feature),訪購率高。
所以,總體上,Low Level 比較有針對性,單個特征覆蓋面小(含有這個特征的數據不多),特征數量(維度)很大。High Level比較泛化,單個特征覆蓋面大(含有這個特征的數據很多),特征數量(維度)不大。長尾樣本的預測值主要受High Level特征影響。高頻樣本的預測值主要受Low Level特征影響。

對于訪購率問題,有大量的High Level或Low Level的特征,其中一些展示在下圖:
這里寫圖片描述

實例詳解機器學習如何解決問題

非線性模型的特征

1)可以主要使用High Level特征,因為計算復雜度大,所以特征維度不宜太高;

2)通過High Level非線性映射可以比較好地擬合目標。

線性模型的特征

1)特征體系要盡可能全面,High Level和Low Level都要有;

2)可以將High Level轉換Low Level,以提升模型的擬合能力。

特征歸一化

特征抽取后,如果不同特征的取值范圍相差很大,最好對特征進行歸一化,以取得更好的效果,常見的歸一化方式如下:

Rescaling:

歸一化到[0,1] 或 [-1,1],用類似方式:
這里寫圖片描述

實例詳解機器學習如何解決問題
Standardization:

設 為x分布的均值,
為x分布的標準差;
這里寫圖片描述

Scaling to unit length:

歸一化到單位長度向量
這里寫圖片描述

特征選擇

特征抽取和歸一化之后,如果發現特征太多,導致模型無法訓練,或很容易導致模型過擬合,則需要對特征進行選擇,挑選有價值的特征。

Filter:假設特征子集對模型預估的影響互相獨立,選擇一個特征子集,分析該子集和數據Label的關系,如果存在某種正相關,則認為該特征子集有效。衡量特征子集和數據Label關系的算法有很多,如Chi-square,Information Gain。

Wrapper:選擇一個特征子集加入原有特征集合,用模型進行訓練,比較子集加入前后的效果,如果效果變好,則認為該特征子集有效,否則認為無效。

Embedded:將特征選擇和模型訓練結合起來,如在損失函數中加入L1 Norm ,L2 Norm。

訓練模型

完成特征抽取和處理后,就可以開始模型訓練了,下文以簡單且常用的Logistic Regression模型(下稱LR模型)為例,進行簡單介紹。

設有m個(x,y)訓練數據,其中x為特征向量,y為label,
;w為模型中參數向量,即模型訓練中需要學習的對象。

所謂訓練模型,就是選定假說函數和損失函數,基于已有訓練數據(x,y),不斷調整w,使得損失函數最優,相應的w就是最終學習結果,也就得到相應的模型。

模型函數

1)假說函數,即假設x和y存在一種函數關系:

2)損失函數,基于上述假設函數,構建模型損失函數(優化目標),在LR中通常以(x,y)的最大似然估計為目標:

優化算法

梯度下降(Gradient Descent)

即w沿著損失函數的負梯度方向進行調整,示意圖見下圖,
的梯度即一階導數(見下式),梯度下降有多種類型,如隨機梯度下降或批量梯度下降。

隨機梯度下降(Stochastic Gradient Descent),每一步隨機選擇一個樣本
,計算相應的梯度,并完成w的更新,如下式,

批量梯度下降(Batch Gradient Descent),每一步都計算訓練數據中的所有樣本對應的梯度,w沿著這個梯度方向迭代,即

牛頓法(Newton’s Method)

牛頓法的基本思想是在極小點附近通過對目標函數做二階Taylor展開,進而找到L(w)的極小點的估計值。形象地講,在w k 處做切線,該切線與L(w)=0的交點即為下一個迭代點w k+1 (示意圖如下)。w的更新公式如下,其中目標函數的二階偏導數,即為大名鼎鼎的Hessian矩陣。

擬牛頓法(Quasi-Newton Methods):計算目標函數的二階偏導數,難度較大,更為復雜的是目標函數的Hessian矩陣無法保持正定;不用二階偏導數而構造出可以近似Hessian矩陣的逆的正定對稱陣,從而在”擬牛頓”的條件下優化目標函數。

BFGS: 使用BFGS公式對H(w)進行近似,內存中需要放H(w),內存需要O(m 2 )級別;

L-BFGS:存儲有限次數(如k次)的更新矩陣
,用這些更新矩陣生成新的H(w),內存降至O(m)級別;

OWLQN: 如果在目標函數中引入L1正則化,需要引入虛梯度來解決目標函數不可導問題,OWLQN就是用來解決這個問題。

Coordinate Descent

對于w,每次迭代,固定其他維度不變,只對其一個維度進行搜索,確定最優下降方向(示意圖如下),公式表達如下:

優化模型

經過上文提到的數據篩選和清洗、特征設計和選擇、模型訓練,就得到了一個模型,但是如果發現效果不好?怎么辦?

【首先】

反思目標是否可預估,數據和特征是否存在bug。

【然后】

分析一下模型是Overfitting還是Underfitting,從數據、特征和模型等環節做針對性優化。

Underfitting & Overfitting

所謂Underfitting,即模型沒有學到數據內在關系,如下圖左一所示,產生分類面不能很好的區分X和O兩類數據;產生的深層原因,就是模 型假設空間太小或者模型假設空間偏離。所謂Overfitting,即模型過渡擬合了訓練數據的內在關系,如下圖右一所示,產生分類面過好地區分X和O兩 類數據,而真實分類面可能并不是這樣,以至于在非訓練數據上表現不好;產生的深層原因,是巨大的模型假設空間與稀疏的數據之間的矛盾。

在實戰中,可以基于模型在訓練集和測試集上的表現來確定當前模型到底是Underfitting還是Overfitting,判斷方式如下表:

訓練集表現 測試集表現 問題
< 期望目標值 < 期望目標值 Underfitting

期望目標值 接近或略遜于訓練集 合適
期望目標值 遠差于訓練集 Overfitting
**

怎么解決Underfitting和Overfitting問題?

**
問題 數據 特征 模型
Underfitting 清洗數據 1. 增加特征2. 刪除噪音特征 1. 調低正則項的懲罰參數
2. 換更“復雜”的模型(如把線性模型換為非線性模型)
3. 多個模型級聯或組合
Overfitting 增加數據 1. 進行特征選擇
2. 降維(如對特征進行聚類、主題模型進行處理等) 1. 提高正則項的懲罰參數
2. 減少訓練迭代次數
3. 換更“簡單”的模型(如把非線性模型換為線性模型)

總結

綜上所述,機器學習解決問題涉及到問題建模、準備訓練數據、抽取特征、訓練模型和優化模型等關鍵環節,有如下要點:

理解業務,分解業務目標,規劃模型可預估的路線圖。
數據:
y數據盡可能真實客觀;
訓練集/測試集分布與線上應用環境的數據分布盡可能一致。
特征:
利用Domain Knowledge進行特征抽取和選擇;
針對不同類型的模型設計不同的特征。
模型:
針對不同業務目標、不同數據和特征,選擇不同的模型;
如果模型不符合預期,一定檢查一下數據、特征、模型等處理環節是否有bug;
考慮模型Underfitting和Qverfitting,針對性地優化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux中python2和python3的pip設置 及清華安裝源

啟動python2&#xff0c;我們可以直接在命令行輸入&#xff1a;python2 啟動python3&#xff0c;我們可以在命令行輸入&#xff1a;python或者python3. 但是pip沒有設置的話&#xff0c;在命令行輸入 pip --version 或者 pip2 --version&#xff0c;指向的都是python2. 現在…

java 循環 基本類型

1.基本if選擇結構 格式&#xff1a;if&#xff08;布爾表達式&#xff09;{ 表達式結果為true&#xff0c;則執行此代碼塊 } 例&#xff1a;if(week <5 ){ System.out.println(“上班”) } 2.if else結構 格式&#xff1a;if(布爾表達式){ 表達式結果為true&#xff0c;則執…

CodePlex關閉,建議遷移至GitHub

Microsoft決定停止提供CodePlex開源項目免費托管服務。他們建議開發人員可以遷移到GitHub或任何其他托管服務提供商。\\盡管有些人希望CodePlex關閉的消息僅僅是4月1日愚人節玩笑&#xff0c;但是Microsoft副總裁Brian Harry已經證明這并不是一個玩笑。在提供服務11年之后&…

計算機最佳參數,對使用者來說,學會計算機性能參數提取,給出性能評價很重要...

對計算機進行系統信息提取&#xff0c;并且給出性能評價&#xff0c;可以這樣做先看思維導圖&#xff1a;對計算機進行系統信息提取&#xff0c;并且給出性能評價&#xff0c;可以通過軟件測試實現&#xff01;一、 關于硬件健康的問題&#xff0c;避免買到二手配件。硬盤的使用…

word如何在任意頁開始添加頁碼

第一步&#xff0c;將光標定位到需要插入頁碼的前一頁末尾。就是說&#xff0c;如果你想從第二頁開始添加頁碼&#xff0c;那么你就將光標定位到第一頁末尾&#xff0c;如圖&#xff1a; 然后按照圖中標出的提示&#xff0c;選擇“頁面布局”選項卡&#xff0c;點擊“分隔符…

跨越請求,關于后端session會話丟失的解決辦法(轉載)

目前使用前后端分離的模式開發&#xff0c;后端提供跨域接口、前端jsonp調用&#xff0c;綁定數據&#xff0c;但是在該站點下有個人中心模塊存在的情況下&#xff0c;服務端的session會話會被跨域請求覆蓋改掉 大家都知道tomcat使用cookie中jsessionid來區分客戶端session會話…

融云通訊服務器,vue使用融云即時通訊,老是報了發送失敗,服務器超時

created() {//建立連接RongIMLib.RongIMClient.init("lmxuhwagl5ukd"); //這是關鍵點&#xff0c;需要填寫appkey lmxuhwagl5ukdthis.StatusListener();this.getUser()},method&#xff1a;{//下面是建立連接的StatusListener(){//RongIMLib.RongIMCli…

Mongodb基本使用方法

一、操作mongodb數據庫 1、創建數據庫 語法&#xff1a;use 數據庫名 注意&#xff1a;如果數據庫不存在則創建數據庫&#xff0c;否則切換到指定的數據庫 注意&#xff1a;如果剛剛創建的數據庫不在列表內&#xff0c;如果要顯示它&#xff0c;我…

Device eth0 does not seem to be present,delaying initialization的解決辦法

最近由于重裝了操作系統導致之前配置好的集群出現了問題&#xff0c;需要修正一下&#xff0c;在剛開始為NameNode配置網絡設置的時候&#xff0c;已經按照網上的相關步驟配置好了ifcfg-eth0文件中的內容&#xff0c;但在ifconfig時卻無法觀察到設置的靜態IP地址&#xff0c;后…

Angularjs 動態添加指令并綁定事件

先說使用場景&#xff0c;動態生成DOM元素并綁定事件&#xff0c;非常常見的一種場景&#xff0c;用jq實現效果&#xff1a; http://jsbin.com/gajizuyuju/edit?html,js,output var count0; $("#test").on("click",function(event){if(event.target.tagNa…

css標簽resolution,html/css to fit all screen resolution

可以將文章內容翻譯成中文,廣告屏蔽插件可能會導致該功能失效(如失效&#xff0c;請關閉廣告屏蔽插件后再試):問題:Im working on the website and Im trying to make it responsive to all resolutions but without success..Here is HTML:Lorem ipsum nasov je? "Lorem…

釘釘開發筆記(一)

釘釘開發分為&#xff1a;1、移動客戶端。2、PC端。3、服務端。三個平臺的開發。 1、移動端&#xff1a;面對釘釘手機用戶和企業用戶。 2、同上主要面向PC端的用戶和企業。 3、服務端&#xff0c;用于用戶和企業內部管理的平臺方向&#xff0c;例如OA網站。 本人主要從事移動端…

import導入模塊

面試題: import module與from module import * 兩種模塊導入有何區別 1. import module 引用共享變量時&#xff0c;要使用module.變量名,而from module import * 直接使用變量名即可 2. import module方式 本地不會創…

在啟動HDFS時,針對集群中namenode無法識別datanode的問題的解決方法

最近由于重裝了系統&#xff0c;需要對之前搭建的集群要做些改動。在對每個虛擬機的網絡進行正確的配置之后&#xff0c;重新執行hadoop/sbin/start-dfs.sh命令來啟動HDFS&#xff0c;然而namenode卻無法識別datanode。 后來通過對之前學過的知識進行回顧和梳理發現了問題的所…

HBase的基礎知識

1.HBase(NoSQL&#xff1a;不是關系型數據庫)的邏輯數據模型 HBase – Hadoop Database&#xff0c;是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統&#xff0c;利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。HBase利用Hadoop HDFS作為其文件存儲系統…

Django 部署基礎【使用 Nginx + uWSGI 的方式來部署來 Django】

本文主要講解在 Linux 平臺下&#xff0c;使用 Nginx uWSGI 的方式來部署來 Django&#xff0c;這是目前比較主流的方式。當然你也可以使用 Gunicorn 代替 uWSGI&#xff0c;不過原理都是類似的&#xff0c;弄懂了其中一種&#xff0c;其它的方式理解起來問題也不會很大。 有很…

css的屬性是變量是怎么表達,CSS自定義屬性(變量)

Github上有個叫electron-api-demos的項目&#xff0c;看代碼的時候發現了這么一個css文件(variables.css)&#xff1a;:root {--color: hsl(0,0%,22%);--color-subtle: hsl(0,0%,44%);--color-strong: hsl(0,0%,11%);--color-link: hsl(0,0%,22%);--color-border: hsl(0,0%,88%…

Exception in thread main java.lang.UnsupportedClassVersionError的另類解決辦法

最近在Linux虛擬機上跑在windows平臺上的eclipes打出來的jar包時報出Exception in thread “main” java.lang.UnsupportedClassVersionError的錯誤&#xff1a; 經過上網查詢了解到是因為自己Windows使用的是jdk1.8版本&#xff0c;而Linux使用的是jdk1.7版本&#xff0c;所…

Linux命令【第一篇】

1、創建一個目錄/data 記憶方法&#xff1a;英文make directorys縮寫后就是mkdir。 命令&#xff1a; mkdir /data 或 cd /;mkdir data #提示&#xff1a;使用分號可以在一行內分割兩個命令。 實踐過程&#xff1a; 方法一&#xff1a; [rootoldboy66 ~]# mkdir /data #查…