




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章人工智能技術應用
選題背景及意義1人工智能的研究方法探索4.1人工智能的研究方法探索1956年8月,在美國漢諾斯小鎮寧靜的達特茅斯學院中,約翰·麥卡錫(JohnMcCarthy)、馬文·閔斯基(MarvinMinsky,人工智能與認知學專家)、克勞德·香農(ClaudeShannon,信息論的創始人)、艾倫·紐厄爾(AllenNewell,計算機科學家)、赫伯特·西蒙(HerbertSimon,諾貝爾經濟學獎得主)等科學家正聚在一起,討論著一個完全不食人間煙火的主題:用機器來模仿人類學習以及其他方面的智能。4.1人工智能的研究方法探索20世紀80年代,專家系統(ExpertSystem)出現又讓企業家和科學家看到了人工智能學科的新希望,繼而形成人工智能歷史上的第二股浪潮。專家系統是指解決特定領域問題的能力已達到該領域的專家能力,其核心是透過運用專家多年累積的豐富經驗和專家知識,不斷模擬專家解決問題的思維,處理只有專家才能處理的問題。4.1人工智能的研究方法探索2012年以后,得益于數據量的上漲、運算力的提升和深度學習的出現,人工智能開始大爆發。《全球AI領域人才報告》顯示,截至2017年一季度,基于領英平臺的全球AI(人工智能)領域技術人才數量超過190萬,僅國內人工智能人才缺口達到500多萬。人工智能的研究領域也在不斷擴大4.1人工智能的研究方法探索人工智能可以細分為強人工智能和弱人工智能,人工智能更注重“人工”的重要性,強人工智能更注重“智能”的重要性。在弱人工智能對某個問題進行決策時,人仍然需要積極參與其中,所以弱人工智能也被稱作限制領域的人工智能或應用型人工智能。弱人工智能只能在特定的領域解決特定的問題,4.1.1人工智能,機器學習和深度學習的關系
一種實現人工智能的方法
機器學習
機器學習最基本的做法,是使用算法來解析數據、從中學習,然后對真實世界中的事件做出決策和預測。典型案例:商品推薦人工智能的各個分支機器學習來源機器學習直接來源于早期的人工智能領域,傳統的算法包括決策樹聚類貝葉斯分類支持向量機EM(ExpectationMaximization)Adaboost……機器學習算法分類從學習方法上來分,機器學習算法可以分為:監督學習(如分類問題)無監督學習(如聚類問題)半監督學習集成學習深度學習強化學習深度學習一種實現機器學習的技術深度學習本來并不是一種獨立的學習方法有監督無監督一些特有的學習手段相繼被提出(如殘差網絡)
三者的區別和聯系深度學習的問題
小樣本問題深度學習方法無法入手,傳統的機器學習方法就可以處理;有些領域,采用傳統的簡單的機器學習方法,可以很好地解決了,沒必要非得用復雜的深度學習方法;深度學習的思想,來源于人腦的啟發,但絕不是人腦的模擬4.1.2常用的人工智能研究方法
4.1.2常用的人工智能研究方法1.大腦模擬2.符號處理3.子符號法4.統計學法5.集成方法大腦模擬
20世紀40年代到50年代,許多研究者探索神經病學,信息理論及控制論之間的聯系。其中還造出一些使用電子網絡構造的初步智能,如W.GreyWalter的Turtles和JohnsHopkinsBeast。這些研究者還經常在普林斯頓大學和英國的RATIOCLUB舉行技術協會會議。直到1960年,大部分人已經放棄這個方法,盡管在80年代再次提出這些原理。符號處理
認知模擬經濟學家赫伯特·西蒙和艾倫·紐厄爾研究人類問題解決能力和嘗試將其形式化,同時他們為人工智能的基本原理打下基礎,如認知科學,運籌學和經營科學。他們的研究團隊使用心理學實驗的結果開發模擬人類解決問題方法的程序。子符號法
80年代符號人工智能停滯不前,很多人認為符號系統永遠不可能模仿人類所有的認知過程,特別是感知,機器人,機器學習和模式識別。很多研究者開始關注子符號方法解決特定的人工智能問題。統計學法90年代,人工智能研究發展出復雜的數學工具來解決特定的分支問題。這些工具是真正的科學方法,即這些方法的結果是可測量的和可驗證的,同時也是人工智能成功的原因。共用的數學語言也允許已有學科的合作(如數學,經濟或運籌學)。StuartJ.Russell和PeterNorvig指出這些進步不亞于“革命”和“NEATS的成功”。有人批評這些技術太專注于特定的問題,而沒有考慮長遠的強人工智能目標。集成方法智能Agent范式:智能Agent是一個會感知環境并作出行動以達致目標的系統。最簡單的智能Agent是那些可以解決特定問題的程序。更復雜的Agent包括人類和人類組織(如公司)。這些范式可以讓研究者研究單獨的問題和找出有用且可驗證的方案,而不需考慮單一的方法。4.1.3計算智能4.1.3計算智能1.神經計算2.進化計算3.模糊計算神經計算
神經計算的概念:亦稱神經網絡(NeuralNetwork,NN),它是通過對大量人工神經元的廣泛并行互聯所形成的一種人工網絡系統,用于模擬生物神經系統的結構和功能。主要研究內容:包括人工神經元的結構和模型,人工神經網絡的互聯結構和系統模型,基于神經網絡的聯結學習機制等進化計算
網進化計算是一種模擬自然界生物進化過程與機制,進行問題求解的自組織、自適應的隨機搜索技術。它以達爾文進化論的“物競天擇、適者生存”作為算法的進化規則,并結合孟德爾的遺傳變異理論,將生物進化過程中的繁殖、變異、競爭和選擇引入到了算法中,是一種對人類智能的演化模擬方法。模糊計算
模糊計算(美國密執安大學霍蘭德教授1962提出)是使用模擬生物和人類進化的方法來求解復雜問題。它從初始種群出發,采用優勝劣汰、適者生存的自然法則選擇個體,并通過雜交、變異產生新一代種群,如此逐代進化,直到滿足目標為止。4.1.4邏輯編程科學知識與知識表示知識是把有關的信息關聯在一起,形成的關于客觀世界某種規律性認識的動態信息結構。在人工智能中知識可以表示成
知識=事實+規則+概念知識與知識表示(1)邏輯表示法邏輯表示法以謂詞形式來表示動作的主體、客體,是一種敘述性知識表示方法。利用邏輯公式,人們能描述對象、性質、狀況和關系。它主要用于自動定理的證明。邏輯表示法主要分為命題邏輯和謂詞邏輯。例如:諸葛亮是人。
表示為:Human(Zhugeliang)馬科斯是男人。
表示為:Man(Marcs)詹文是李小明的老師
表示為:Teacher(Zhangwen,Lixiaoming)所有龐貝人都是羅馬人。表示為:x(Pompeian(x)→Roman(x))知識與知識表示(2)產生式表示法產生式表示,又稱規則表示,有的時候被稱為IF-THEN表示,它表示一種條件-結果形式,是一種比較簡單表示知識的方法。IF后面部分描述了規則的先決條件,而THEN后面部分描述了規則的結論。規則表示方法主要用于描述知識和陳述各種過程知識之間的控制,及其相互作用的機制。例如:IF某動物吃肉THEN它是食肉動物IF動物有毛發,THEN動物為哺乳類IF爐溫超過上限THEN立即關閉風門知識與知識表示(3)框架表示框架(Frame)是把某一特殊事件或對象的所有知識儲存在一起的一種復雜的數據結構(見第2章)。其主體是固定的,表示某個固定的概念、對象或事件,其下層由一些槽(Slot)組成,表示主體每個方面的屬性。知識與知識表示例如:描述“學生”的框架:框架名:<學生>類屬:<知識分子>/框架調用/工作:范圍:(理論學習,社會實踐)
默認:學習性別:(男,女)類型:(<小學生>,<中學生>,<大學生本科>,<大學生碩士>,<大學生博士>,<大學生博士后>)知識與知識表示(4)面向對象的表示方法面向對象的知識表示方法是按照面向對象的程序設計(見第2章)原則組成一種混合知識表示形式,就是以對象為中心,把對象的屬性、動態行為、領域知識和處理方法等有關知識封裝在表達對象的結構中。知識與知識表示(5)語義網表示法語義網絡是知識表示中最重要的方法之一,是一種表達能力強而且靈活的知識表示方法。它通過概念及其語義關系來表達知識的一種網絡圖。從圖論的觀點看,它是一個“帶標識的有向圖”。語義網絡利用節點和帶標記的邊構成的有向圖描述事件、概念、狀況、動作及客體之間的關系。帶標記的有向圖能十分自然的描述客體之間的關系。知識與知識表示例如:用語義網絡表示下列知識:整數由正整數、負整數和零組成。知識與知識表示(6)基于XML的表示法在XML(eXtensibleMarkuplanguage,可擴展標記語言)中,數據對象使用元素描述,而數據對象的屬性可以描述為元素的子元素或元素的屬性。XML文檔由若干個元素構成,數據間的關系通過父元素與子元素的嵌套形式體現。邏輯編程之實踐>>>pipinstallkanren>>>pipinstallsympy安裝完成后開始邏輯編程第1步,任務:判斷一個數x是否等于5。代碼:>>>fromkanrenimportrun,eq,membero,var,conde,vars>>>x=var()>>>run(1,x,eq(x,5))運行結果為:(5,)繼續添加z是變量的事實,規則定義為:x==z,同時z==3>>>z=var()>>>run(1,x,eq(x,z),eq(z,3))運行結果為:(3,)選題背景及意義2人工智能的相關主題邏輯編程科學邏輯編程的要點是將正規的邏輯風格帶入計算機程序設計之中。事實:基本上是關于計劃和數據的真實陳述。例如,北京是中國的首都。規則:是對問題域做出結論的約束條件。規則基本上寫成邏輯條款來表達各種事實規則的語法A∶?B1,B2,...,Bn.在這里,A是頭部,B1,B2,…Bn是主體。例如-ancestor(X,Y):-father(X,Y)。ancestor(X,Z):-father(X,Y),ancestor(Y,Z)。在Python中開始邏輯編程安裝Kanren和SymPy兩個包。pipinstallkanrenpipinstallsympy邏輯編程的"Hello,world!"判斷一個數x是否等于5>>>fromkanrenimportrun,eq,membero,var,conde,vars>>>x=var()>>>run(1,x,eq(x,5))(5,)多個變量和多個目標下列代碼判定一個數x,如x==z,同時z==3>>>z=var()>>>run(1,x,eq(x,z),eq(z,3))(3,)統一模式匹配使用統一模式匹配的高級形式來匹配表達式樹。下列代碼匹配X,如(1,2)=(1,x)。>>>run(1,x,eq((1,2),(1,x)))(2,)兩個表達式相等membero(item,coll)表示item是coll集合中的一個成員。下面例子使用兩次membero去匹配x的2個值,>>>run(2,x,membero(x,(1,2,3)),#x是(1,2,3)的成員之一
membero(x,(2,3,4)))#x是(2,3,4)的成員之一
#2表示求兩個解,則,變量x,可能的解為(2,3)(2,3)邏輯變量z=var()創建一個Kanren中的邏輯變量,還可以選擇為變量命名,以方便后面調試:>>>z=var('test')>>>z~test一次創建一組邏輯變量也可以用vars()帶一個整形參數一次創建一組邏輯變量:>>>a,b,c=vars(3)>>>a~_1>>>b~_2>>>c~_3例4.1匹配數學表達式需要將任意表達式與原始模式(5+a)*b相匹配,并求出a和b。例4.1匹配數學表達式(解答)以下Python代碼用于匹配數學表達式。考慮先導入下列軟件包:fromkanrenimportrun,var,factfromkanren.assoccommimporteq_assoccommaseqfromkanren.assoccommimportcommutative,associative例4.1匹配數學表達式(解答)需要定義要使用的數學運算:add='add'mul='mul'加法和乘法都是交互進程。因此,我們需要指定它,這可以按照以下方式完成:fact(commutative,mul)fact(commutative,add)fact(associative,mul)fact(associative,add)例4.1匹配數學表達式(解答)定義變量是強制性的;這可以如下完成:a,b=var('a'),var('b')需要將表達式與原始模式(5+a)*b相匹配,基礎是:original_pattern=(mul,(add,5,a),b)有以下兩個表達式來匹配原始模式:exp1=(mul,(add,5,1),2)exp2=(add,5,(mul,8,1))例4.1匹配數學表達式(解答)輸出可以使用以下命令打印:print(run(0,(a,b),eq(original_pattern,exp1)))print(run(0,(a,b),eq(original_pattern,exp2)))運行此代碼后,將得到以下輸出:((1,2),)()第一個輸出表示a和b的值。第一個表達式匹配原始模式并返回a和b的值,但第二個表達式與原始模式不匹配,因此沒有返回任何內容。例4.2查找素數在邏輯編程的幫助下,可以從數字列表中出素數,也可以生成素數。例4.2查找素數(解答)下面給出的Python代碼將從數字列表中找到素數,并且還會生成前10個素數。首先導入以下軟件包:fromkanrenimportisvar,run,memberofromkanren.coreimportsuccess,fail,goaleval,condeseq,eq,varfromsympy.ntheory.generateimportprime,isprimeimportitertoolsasit例4.2查找素數(解答)現在,我們將定義一個名為prime_check的函數,它將根據給定的數字檢查素數作為數據。defprime_check(x):ifisvar(x):returncondeseq([(eq,x,p)]forpinmap(prime,it.count(1)))else:returnsuccessifisprime(x)elsefail例4.2查找素數(解答)現在,聲明一個變量:x=var()print((set(run(0,x,(membero,x,(12,14,15,19,20,21,22,23,29,30,41,44,52,62,65,85)),(prime_check,x)))))print((run(10,x,prime_check(x))))上述代碼的輸出如下:{41,19,23,29}(2,3,5,7,11,13,17,19,23,29)例4.3斑馬拼圖有五間房子。英國人住在紅房子里。瑞典人有一只狗。丹麥人喝茶。綠房子在白房子的左邊。他們在綠房子里喝咖啡。吸PallMall的人有鳥。吸Dunhill在的人黃色房子里。在中間的房子里,他們喝牛奶。挪威人住在第一宮。那個抽Blend的男人住在貓屋旁邊的房子里。在他們有一匹馬的房子旁邊的房子里,他們吸Dunhill煙。抽BlueMaster的人喝啤酒。德國人吸Prince煙。挪威人住在藍房子旁邊。他們在房子旁邊的房子里喝水,在那里吸Blend煙。在Python的幫助下解決誰有斑馬的問題例4.3斑馬拼圖(解答)導入必要的軟件包:fromkanrenimport*fromkanren.coreimportlallimporttime例4.3斑馬拼圖(解答)現在,我們需要定義兩個函數-left()和next()來查找哪個房屋左邊或接近誰的房子:defleft(q,p,list):returnmembero((q,p),zip(list,list[1:]))defnext(q,p,list):returnconde([left(q,p,list)],[left(p,q,list)])現在,聲明一個變量houses,如下:houses=var()例4.3斑馬拼圖(解答)需要在lall包的幫助下定義規則如下。有5間房子:rules_zebraproblem=lall((eq,(var(),var(),var(),var(),var()),houses),(membero,('Englishman',var(),var(),var(),'red'),houses),(membero,('Swede',var(),var(),'dog',var()),houses),(membero,('Dane',var(),'tea',var(),var()),houses),(left,(var(),var(),var(),var(),'green'),(var(),var(),var(),var(),'white'),houses),(membero,(var(),var(),'coffee',var(),'green'),houses),(membero,(var(),'PallMall',var(),'birds',var()),houses),(membero,(var(),'Dunhill',var(),var(),'yellow'),houses),(eq,(var(),var(),(var(),var(),'milk',var(),var()),var(),var()),houses),例4.3斑馬拼圖(解答)(eq,(('Norwegian',var(),var(),var(),var()),var(),var(),var(),var()),houses),(next,(var(),'Blend',var(),var(),var()),(var(),var(),var(),'cats',var()),houses),(next,(var(),'Dunhill',var(),var(),var()),(var(),var(),var(),'horse',var()),houses),(membero,(var(),'BlueMaster','beer',var(),var()),houses),(membero,('German','Prince',var(),var(),var()),houses),(next,('Norwegian',var(),var(),var(),var()),(var(),var(),var(),var(),'blue'),houses),(next,(var(),'Blend',var(),var(),var()),(var(),var(),'water',var(),var()),houses),(membero,(var(),var(),var(),'zebra',var()),houses))例4.3斑馬拼圖(解答)現在,用前面的約束運行解算器:solutions=run(0,houses,rules_zebraproblem)
借助以下代碼,可以提取解算器的輸出:output_zebra=[houseforhouseinsolutions[0]if'zebra'inhouse][0][0]
以下代碼將打印解決方案:print('\n'+output_zebra+'ownszebra.')上述代碼的輸出如下:Germanownszebra.數據預處理導入支持數據預處理的軟件包,這是把數據轉換為特定格式(即預處理)的第一步。使用如下代碼importnumpyasnpfromsklearnimportpreprocessingNumPy-NumPy(NumericalPython)是Python語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。sklearn.preprocessing-此包為用戶提供了多個工具函數和類,用于將原始特征轉換成更適于項目后期學習的特征表示。定義一些樣本數據定義以下樣本數據:
input_data=np.array([[2.1,-1.9,5.5],[-1.5,2.4,3.5],[0.5,-7.9,5.6],[5.9,2.3,-5.8]])二值化這是當需要將數值轉換為布爾值時使用的預處理技術。可以用一種內置的方法來二值化輸入數據,比如說用0.5作為閾值,方法如下:data_binarized=preprocessing.Binarizer(\threshold=0.5).transform(input_data)print("\nBinarizeddata:\n",data_binarized)平均去除
這是機器學習中使用的另一種非常常見的預處理技術。基本上它用于消除特征向量的均值,以便每個特征都以零為中心。還可以消除特征向量中的特征偏差。data_scaled=preprocessing.scale(input_data)print("Mean=",data_scaled.mean(axis=0))print("Stddeviation=",data_scaled.std(axis=0))縮放這是另一種數據預處理技術,用于縮放特征向量。特征向量的縮放是需要的,因為每個特征的值可以在許多隨機值之間變化。data_scaler_minmax=preprocessing.MinMaxScaler(feature_range=(0,1))data_scaled_minmax=data_scaler_minmax.fit_transform(input_data)print("\nMinmaxscaleddata:\n",data_scaled_minmax)L1標準化L1標準化也被稱為最小絕對偏差。這種標準化會修改原始數據值,以便絕對值的總和在每行中總是最多為1。#Normalizedatadata_normalized_l1=preprocessing.normalize(input_data,norm='l1')print("\nL1normalizeddata:\n",data_normalized_l1)L2標準化L2標準化也被稱為最小二乘,以便每一行數據的平方和總是最多為1。#Normalizedatadata_normalized_l2=preprocessing.normalize(input_data,norm='l2')print("\nL2normalizeddata:\n",data_normalized_l2)標記數據某種格式的數據對于人工智能算法是必需的。另一個重要的要求是,在將數據作為算法的輸入之前,必須正確標記數據如果數據是其他形式,那么它必須轉換為數字。這個將單詞標簽轉換為數字形式的過程稱為標記編碼。標記數據的步驟(1)導入支持將數據轉換為特定格式(即預處理)的Python軟件包:(2)導入包后,需要定義一些樣本標簽,以便可以創建和訓練標簽編碼器。(3)創建標簽編碼器并對其進行訓練。(4)通過編碼隨機排序列表來檢查性能,(5)通過對隨機數字集進行解碼來檢查性能。自然語言處理自然語言處理(NLP)是指使用諸如英語以及漢語之類的自然語言與智能系統進行通信的AI方法。NLP系統的輸入和輸出可以是語音(說話)或者書面文字。NLP的基本概念NLP有自然語言理解(NatualLanguageUnderstanding,NLU)和自然語言生成(NatualLanguageGeneration,NLG)兩個組件。自然語言理解(NLU)將給定的自然語言輸入映射為有用的表示并且分析語言的不同方面。文字規劃
-這包括從知識庫中檢索相關內容。句子規劃
-這包括選擇所需的單詞,形成有意義的短語,設定句子的語氣。文本實現
-這是將句子計劃映射到句子結構NLP的分析步驟一般情況下,NLP的分析步驟如下:(1)詞匯分析(2)句法分析(解析)
(3)語義分析(4)話語整合(5)語用分析NLP的Python應用在使用之前需要安裝NLTK,它可以在以下命令來安裝:pipinstallnltk在Python命令提示符下編寫以下命令來導入它:>>>importnltk現在導入NLTK后,還需要下載所需的數據。它可以在Python命令提示符下通過以下命令完成:>>>nltk.download()分詞它可以被定義為將給定文本即字符序列分成稱為Token的較小單元的過程。Token可以是單詞,數字或標點符號。以下是分詞一個簡單示例:輸入:
Mango,Banana,PineappleandAppleallareFruits.輸出:
詞干由于語法原因,文字會有很多變化,這意味著必須處理像:democracy,democratic
和democratization
等不同形式的相同詞匯。機器非常需要理解這些不同的單詞具有相同的基本形式。通過這種方式,在分析文本的同時提取單詞的基本形式將會很有用。在PythonNLTK模塊中,有一些與詞干相關的包。PorterStemmer包LancasterStemmer包SnowballStemmer包詞元化詞性還原也可以通過詞形化來提取單詞的基本形式。它基本上通過使用詞匯的詞匯和形態分析來完成這項任務,通常旨在僅刪除變元結尾。例如,如果提供單詞saw作為輸入詞,那么詞干可能會返回單詞's',但詞形化會嘗試返回單詞see。塊化將數據分割成塊,它是自然語言處理中的重要過程之一。分塊的主要工作是識別詞類和短語,有兩種類型的組塊。類型如下:上分塊在這個組塊過程中,對象,事物等向更普遍的方向發展,語言變得更加抽象。下分塊在這個組塊過程中,對象,事物等朝著更具體的方向發展,更深層次的結構將進行仔細檢查。實現名詞短語分塊第1步
-在這一步中,需要定義分塊的語法。它將包含需要遵循的規則。第2步
-在這一步中,需要創建一個塊解析器。它會解析語法并給出結果。第3步
-在最后一步中,輸出以樹格式生成。詞袋(BOW)模型詞袋,英文為:BagofWord(BoW),它是自然語言處理中的一個模型,基本上用于從文本中提取特征,以便文本可用于建模,以便在機器學習算法中使用。將文本數據轉換為數值數據稱為特征提取或特征編碼。詞袋(BOW)模型例子句子1
-WeareusingtheBagofWordsmodel.句子2
-BagofWordsmodelisusedforextractingthefeatures.現在,通過考慮這兩句子,有以下13個不同的單詞:weareusingthebagofwordsmodelisusedforextractingfeatures現在,需要使用每個句子中的單詞計數為每個句子建立一個直方圖:子句1?[1,1,1,1,1,1,1,1,0,0,0,0,0]子句2?[0,0,0,1,1,1,1,1,1,1,1,1,1]詞頻-逆文檔頻率詞頻-逆文檔頻率(TermFrequency-InverseDocumentFrequency,TF-IDF)。每個單詞在文檔中都很重要。統計數據有助于理解每個詞的重要性。詞頻(TF)衡量每個單詞出現在文檔中的頻率。它可以通過將每個詞的計數除以給定文檔中的詞的總數來獲得。逆文檔頻率(IDF)是衡量在給定的文檔集中這個文檔有多獨特的一個單詞。要計算IDF和制定一個特征向量,需要減少一些常見詞的權重并權衡稀有詞。主題建模文檔被分組為主題。主題建模是一種揭示給定文檔集合中抽象主題或隱藏結構的技術。可以在以下場景中使用主題建模技術:文本分類推薦系統主題建模算法(1)LDA(LatentDirichletAllocation)算法。(2)潛在語義索引(LatentSemanticIndexing,LSI)
(3)非負矩陣分解(NonnegativeMatrixFactorization,NMF):時間序列數據分析時間序列數據表示處于一系列特定時間間隔的數據。使用以下命令安裝Pandas:pipinstallpandasPandas可以執行以下操作:使用pd.date_range包創建一系列日期通過使用pd.Series包對帶有日期數據進行索引使用ts.resample包執行重新采樣改變頻率處理時間序列數據步驟導入以下軟件包:importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd處理時間序列數據步驟獲取數據:wget/products/precip/CWlink/daily_ao_index/monthly.ao.index.b50.current.ascii處理時間序列數據步驟定義一個函數,它將從輸入文件中讀取數據:defread_data(input_file):input_data=np.loadtxt(input_file,delimiter=None)
returninput_datainput_data=read_data(‘monthly.ao.index.b50.current.ascii‘)處理時間序列數據步驟將這些數據轉換為時間序列。在這個例子中,保留一個月的數據頻率。文件中是存儲從1950年1月開始的數據:dates=pd.date_range('1950-01',periods=input_data.shape[0],freq='M')創建時間序列數據,如下所示:timeseries=pd.Series(input_data[:,-1],index=dates)處理時間序列數據步驟繪制并可視化數據plt.figure()timeseries.plot()plt.show()處理時間序列數據步驟在1980年到1990年間對數據進行分割。請注意以下執行此任務的代碼:timeseries['1980':'1990'].plot()plt.show()處理時間序列數據步驟使用mean()函數來查找平均值:timeseries.mean()使用max()函數來查找最大值:timeseries.max()使用min()函數來查找最小值:timeseries.min()使用describe()函數:timeseries.describe()處理時間序列數據步驟將數據重新采樣到不同的時間頻率使用mean()方法重新采樣數據,使用默認方法:timeseries_mm=timeseries.resample("A").mean()timeseries_mm.plot(style='g--')plt.show()處理時間序列數據步驟使用median()方法重新采樣數據:timeseries_mm=timeseries.resample("A").median()timeseries_mm.plot()plt.show()處理時間序列數據步驟計算移動平均值:timeseries.rolling(window=12,center=False).mean().plot(style='-g')plt.show()語音識別語音處理系統主要有三項任務:(1)語音識別允許機器捕捉人類所說的單詞,短語和句子(2)自然語言處理使機器能夠理解人類所說的話(3)語音合成允許機器說話。語音識別語音識別技術的困難可以廣泛地表征為如下所討論的許多維度:(1)詞匯大小(2)信道特性(3)說話模式(4)口語風格
(5)噪音類型
(6)麥克風特性逐步分析音頻信號導入必要的軟件包:importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.ioimportwavfile逐步分析音頻信號讀取存儲的音頻文件frequency_sampling,audio_signal=wavfile.read("audio_file.wav")顯示音頻信號的采樣頻率,信號的數據類型及其持續時間等參數:print('\nSignalshape:',audio_signal.shape)print('SignalDatatype:',audio_signal.dtype)print('Signalduration:',round(audio_signal.shape[0]/float(frequency_sampling),2),'seconds')逐步分析音頻信號對信號進行標準化:audio_signal=audio_signal/np.power(2,15)
從信號中提取出前100個值進行可視化:signal=audio_signal[:100]time_axis=1000*np.arange(0,len(signal),1)/float(frequency_sampling)逐步分析音頻信號可視化信號:plt.plot(time_axis,signal,color='blue')plt.xlabel('Time(milliseconds)')plt.ylabel('Amplitude')plt.title('Inputaudiosignal')plt.show()逐步分析音頻信號(頻域)導入必要的軟件包:importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.ioimportwavfile現在,讀取存儲的音頻文件。它會返回采樣頻率和音頻信號。frequency_sampling,audio_signal=wavfile.read("audio_file.wav")逐步分析音頻信號(頻域)對信號進行標準化:audio_signal=audio_signal/np.power(2,15)提取信號的長度和半長:length_signal=len(audio_signal)half_length=np.ceil((length_signal+1)/2.0).astype()逐步分析音頻信號(頻域)轉換到頻域(使用傅里葉變換)signal_frequency=np.fft.fft(audio_signal)現在,進行頻域信號的歸一化并將其平方:signal_frequency=abs(signal_frequency[0:half_length])/length_signalsignal_frequency**=2逐步分析音頻信號(頻域)提取頻率變換信號的長度和一半長度:len_fts=len(signal_frequency)傅里葉變換信號必須針對奇偶情況進行調整。iflength_signal%2:signal_frequency[1:len_fts]*=2else:signal_frequency[1:len_fts-1]*=2逐步分析音頻信號(頻域)以分貝(dB)為單位提取功率:signal_power=10*np.log10(signal_frequency)調整X軸的以kHz為單位的頻率:x_axis=np.arange(0,len_fts,1)*(frequency_sampling/length_signal)/1000.0逐步分析音頻信號(頻域)信號的特征可視化如下:plt.figure()plt.plot(x_axis,signal_power,color='black')plt.xlabel('Frequency(kHz)')plt.ylabel('Signalpower(dB)')plt.show()生成單調音頻信號導入必要的軟件包:importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.io.wavfileimportwrite指定輸出保存的文件:output_file='audio_signal_generated.wav'生成單調音頻信號指定選擇的參數:duration=4#insecondsfrequency_sampling=44100#inHzfrequency_tone=784min_val=-4*np.pimax_val=4*np.pi生成單調音頻信號生成音頻信號:t=np.linspace(min_val,max_val,duration*frequency_sampling)audio_signal=np.sin(2*np.pi*frequency_tone*t)將音頻文件保存在輸出文件中:write(output_file,frequency_sampling,audio_signal)生成單調音頻信號提取圖形的前100個值:signal=audio_signal[:100]time_axis=1000*np.arange(0,len(signal),1)/float(frequency_sampling)
現在,將生成的音頻信號可視化:plt.plot(time_axis,signal,color='blue')plt.xlabel('Timeinmilliseconds')plt.ylabel('Amplitude')plt.title('Generatedaudiosignal')plt.show()語音特征提取語音特征提取是構建語音識別器的最重要步驟,因為在將語音信號轉換為頻域后,必須將其轉換為可用的特征向量形式。不同的特征提取技術,MFCC(MelFrequencyCepstrumCoefficient,梅爾頻率倒譜系數)PLP(PerceptualLinearPrediction)使用MFCC技術提取特征導入必要的軟件包:importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.ioimportwavfilefrompython_speech_featuresimportmfcc,logfbank讀取存儲的音頻文件frequency_sampling,audio_signal=wavfile.read("audio_file.wav")使用MFCC技術提取特征請注意,在此首先抽取15000個樣本進行分析。signal=audio_signal[:15000]
執行以下命令來提取MFCC特征:features_mfcc=mfcc(signal,frequency_sampling)打印MFCC參數:print('\nMFCC:\nNumberofwindows=',features_mfcc.shape[0])print('Lengthofeachfeature=',features_mfcc.shape[1])使用MFCC技術提取特征繪制并可視化MFCC特征:features_mfcc=features_mfcc.Tplt.matshow(features_mfcc[:,:40])plt.title('MFCC')使用MFCC技術提取特征提取過濾器組特征:filterbank_features=logfbank(audio_signal,frequency_sampling)繪制并可視化過濾器組特征。filterbank_features=filterbank_features.Tplt.matshow(filterbank_features[:,:40])plt.title('Filterbank')plt.show()語音識別語音識別意味著當人們說話時,機器就會理解它。Pyaudio-它可以通過使用pip安裝Pyaudio命令進行安裝。SpeechRecognition-這個軟件包可以通過使用pipinstallSpeechRecognition進行安裝。Google-Speech-API-可以使用命令pipinstallgoogle-api-python-client進行安裝。啟發式搜索搜索算法,根據其是否使用與問題有關的知識,分為盲目搜索和啟發式搜索。啟發式搜索在人工智能中起著關鍵作用。有兩種控制策略或搜索技術:不知情和知情。不知情的搜索也被稱為盲搜索或盲控制策略。解決代數關系在約束滿足問題的幫助下,可以求解代數關系。pipinstallpython-constraint約束滿足來解決代數關系導入約束包:fromconstraintimport*
現在,創建一個名為problem()的模塊對象,如下所示:problem=Problem()約束滿足來解決代數關系定義兩個變量a和b,并且將定義10為它們的范圍,這意味著在前10個數字范圍內得到解決。problem.addVariable('a',range(10))problem.addVariable('b',range(10))約束滿足來解決代數關系定義應用于這個問題的特定約束。請注意,這里使用約束a*2=b。problem.addConstraint(lambdaa,b:a*2==b)創建getSolution()模塊的對象solutions=problem.getSolutions()打印輸出:print(solutions)魔幻正方形定義一個名為magic_square的函數:defmagic_square(matrix_ms):iSize=len(matrix_ms[0])sum_list=[]顯示垂直方塊的代碼:forcolinrange(iSize):sum_list.append(sum(row[col]forrowinmatrix_ms))
顯示了水平方塊的代碼:sum_list.extend([sum(lines)forlinesinmatrix_ms])魔幻正方形水平方塊的代碼實現:dlResult=0foriinrange(0,iSize):dlResult+=matrix_ms[i][i]sum_list.append(dlResult)drResult=0foriinrange(iSize-1,-1,-1):drResult+=matrix_ms[i][i]sum_list.append(drResult)
iflen(set(sum_list))>1:returnFalsereturnTrue魔幻正方形現在,給出矩陣的值并查看輸出結果:print(magic_square([[1,2,3],[4,5,6],[7,8,9]]))
可以觀察到由于總和未達到相同數字,輸出將為False。print(magic_square([[3,9,2],[3,5,7],[9,1,6]]))
可以觀察到輸出將為True,因為總和是相同的數字,即15。遺傳算法遺傳算法(GeneticAlgorithm,GA)是基于自然選擇和遺傳學概念的基于搜索的算法。遺傳算法是稱為進化計算的更大分支的一個子
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年三四線城市房地產投資環境與風險預測報告
- 藥師藥品安全管理制度
- 藥店場所消毒管理制度
- 藥店藥品入庫管理制度
- 菜鳥網絡項目管理制度
- 設備儀器借用管理制度
- 設備售后現場管理制度
- 設備快速換型管理制度
- 設備檢修分級管理制度
- 設備租賃公司管理制度
- 手術物品清點手術室護理實踐指南課件
- 中國鋁業股份有限公司偃師市東溝鋁土礦礦山地質環境保護與土地復墾方案
- 2023-2024學年河南省濮陽市小學語文五年級期末通關考試題附參考答案和詳細解析
- 國語經典歌曲歌詞接龍考試題庫(180題)
- 【真題】2023 云南省特崗教師初中物理學科專業知識試卷全解析版
- 2021年暖通工程師專業基礎考試真題及答案
- 項目信息報備表(模板)
- 壓力容器制造過程控制點一覽表
- 《干部履歷表》填寫樣本-1999年
- 工程建設EHS管理協議
- 如在水底如在空中
評論
0/150
提交評論