Python機器學(xué)習(xí):數(shù)據(jù)建模與分析
定 價:99 元
- 作者:薛薇 等 著
- 出版時間:2021/4/1
- ISBN:9787111674900
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP311.561
- 頁碼:412
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書采用理論與實踐相結(jié)合的方式,引導(dǎo)讀者以Python為工具,以機器學(xué)習(xí)為方法,進(jìn)行數(shù)據(jù)的建模與分析。本書共13章,對機器學(xué)習(xí)的原理部分進(jìn)行了深入透徹的講解,對機器學(xué)習(xí)算法部分均進(jìn)行了Python實現(xiàn)。除前兩章外,各章都給出了可實現(xiàn)的實踐案例,并全彩呈現(xiàn)數(shù)據(jù)可視化圖形。
本書兼具知識的深度和廣度,在理論上突出可讀性,在實踐上強調(diào)可操作性,實踐案例具備較強代表性。隨書提供全部案例的數(shù)據(jù)集、源代碼、教學(xué)PPT、關(guān)鍵知識點,教學(xué)輔導(dǎo)視頻,具備較高實用性。
本書既可以作為數(shù)據(jù)分析從業(yè)人員的參考書,也可作為高等院校數(shù)據(jù)分析、機器學(xué)習(xí)等專業(yè)課程的教材。
掃描關(guān)注機械工業(yè)出版社計算機分社官方微信訂閱號—身邊的信息學(xué),回復(fù)67490即可獲取本書配套資源下載鏈接。
適讀人群 :本書既可以作為數(shù)據(jù)分析從業(yè)人員的參考書,也可作為高等院校數(shù)據(jù)分析、機器學(xué)習(xí)等專業(yè)課程的教材。 配套資源:電子課件、案例程序源代碼、案例數(shù)據(jù)集
本書特色:
系統(tǒng)介紹Python用于機器學(xué)習(xí)的數(shù)據(jù)分析、機器學(xué)習(xí)、數(shù)據(jù)可視化相關(guān)庫。
結(jié)合大量實例透徹講解各類機器學(xué)習(xí)算法在數(shù)據(jù)建模、數(shù)據(jù)分析中的應(yīng)用。
全彩呈現(xiàn)數(shù)據(jù)建?梢暬瘓D像,提供配套數(shù)據(jù)集、源代碼、PPT等學(xué)習(xí)資源。
前言
機器學(xué)習(xí)是數(shù)據(jù)科學(xué)中數(shù)據(jù)建模和分析的重要方法,既是當(dāng)前大數(shù)據(jù)分析的基礎(chǔ)和主流工具,也是通往深度學(xué)習(xí)和人工智能的必經(jīng)之路;Python是數(shù)據(jù)科學(xué)實踐中最常用的計算機編程語言,既是當(dāng)前最流行的機器學(xué)習(xí)實現(xiàn)工具,也會因其在理論和應(yīng)用方面的不斷發(fā)展完善而擁有長期的競爭優(yōu)勢。在學(xué)好機器學(xué)習(xí)的理論方法的同時,掌握Python語言這個實用工具,是成為數(shù)據(jù)科學(xué)人才所必不可少的。
筆者將多年來在機器學(xué)習(xí)、數(shù)據(jù)挖掘、統(tǒng)計學(xué)、計算機語言和統(tǒng)計應(yīng)用軟件等課程中的教學(xué)經(jīng)驗與科研實踐進(jìn)行歸納總結(jié),精心編寫了這本實用的圖書,希望將經(jīng)驗和心得分享給廣大從事數(shù)據(jù)科學(xué)以及Python機器學(xué)習(xí)的同仁和高校師生們。
本書的特點如下:
1.對原理部分做清晰的講解
機器學(xué)習(xí)是一門交叉性很強的學(xué)科,涉及統(tǒng)計學(xué)、數(shù)據(jù)科學(xué)、計算機學(xué)科等多個領(lǐng)域的知識。學(xué)習(xí)者要掌握好每個模型或算法的精髓和實踐,需要由淺入深地關(guān)注直觀含義、方法原理、公式推導(dǎo)、算法實現(xiàn)和適用場景等多個遞進(jìn)層面。本書也正是基于這樣的層面來組織內(nèi)容。
2.對實踐部分做全面的實現(xiàn)
機器學(xué)習(xí)也是一門實操性很強的學(xué)科。學(xué)習(xí)者需要邊學(xué)邊做才能獲得更加深刻的認(rèn)知。正是如此,本書在第3章~第13章中設(shè)置了Python建模實現(xiàn)和Python實踐案例。一方面,通過Python代碼和各種可再現(xiàn)的圖形,幫助學(xué)習(xí)者理解抽象理論背后的直觀含義和方法精髓。另一方面,通過Python代碼,幫助學(xué)習(xí)者掌握和拓展機器學(xué)習(xí)的算法實現(xiàn)和應(yīng)用實踐。全書所有模型和算法都有相應(yīng)的Python代碼,并提供全部代碼下載。除第1章外,各章結(jié)尾還配有本章總結(jié)、本章相關(guān)函數(shù)和本章習(xí)題。
3.適合作為機器學(xué)習(xí)或相關(guān)課程的教學(xué)及自學(xué)用書
本書在理論上突出可讀性并兼具知識的深度和廣度,實踐上強調(diào)可操作性并兼具應(yīng)用的廣泛性。本書采用一種有效而獨特的方式講解機器學(xué)習(xí):一方面,以數(shù)據(jù)建模和分析中的問題為導(dǎo)向,依知識點的難度,由淺入深地討論了眾多主流機器學(xué)習(xí)算法的原理;另一方面,通過Python編程和可視化圖形,直觀展示抽象理論背后的精髓和樸素道理;通過應(yīng)用案例強化算法的應(yīng)用實踐。
在章節(jié)安排上,本書分13章。在第1章以機器學(xué)習(xí)概述開篇,第2章介紹Python機器學(xué)習(xí)基礎(chǔ),第3章集中對數(shù)據(jù)預(yù)測與預(yù)測建模的各個方面進(jìn)行了整體論述,幫助讀者掌握機器學(xué)習(xí)的整體知識框架。后續(xù)第4章~第9章按照由易到難的內(nèi)在邏輯,順序展開機器學(xué)習(xí)預(yù)測建模方法的介紹,包括貝葉斯分類器、近鄰分析、決策樹、集成學(xué)習(xí)、人工神經(jīng)網(wǎng)絡(luò)和支持向量機等眾多經(jīng)典機器學(xué)習(xí)算法。第10、11章聚焦數(shù)據(jù)建模中不可或缺的重要環(huán)節(jié)——特征工程,分別論述了特征選擇和特征提取。第12、13章深入介紹了機器學(xué)習(xí)中的聚類算法。
在內(nèi)容設(shè)計上,除前兩章外的各章均由基本原理、Python建模實現(xiàn)、Python實踐案例、本章總結(jié)、本章相關(guān)函數(shù)以及本章習(xí)題幾部分組成;驹聿糠衷敿(xì)論述了機器學(xué)習(xí)的算法,旨在使讀者能夠知其然更知其所以然;Python建模實現(xiàn)部分通過編程直觀展示了抽象理論背后的樸素道理,從而幫助讀者進(jìn)一步加深對理論精髓的理解;Python實踐案例部分展現(xiàn)了機器學(xué)習(xí)在環(huán)境污染、法律裁決、大眾娛樂、醫(yī)藥健康、汽車節(jié)能、人工智能和商業(yè)分析等眾多領(lǐng)域的應(yīng)用,旨在提升讀者的算法實踐水平;本章總結(jié)、本章相關(guān)函數(shù)和本章習(xí)題部分簡要回顧本章理論,歸納所涉及的Python函數(shù),并通過習(xí)題強化知識要點。
本書以高等院校每周3至4課時共計約17周的課時數(shù)安排內(nèi)容。Python建模實現(xiàn)部分,既可與Python實踐案例共同作為上機實驗課單獨進(jìn)行,也可與基本原理相結(jié)合一并講解學(xué)習(xí)。內(nèi)容設(shè)計和體量安排,不僅和數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)的專業(yè)課程設(shè)置相吻合,也可滿足人工智能、統(tǒng)計學(xué)以及計算機應(yīng)用等相關(guān)專業(yè)課程的要求。本書也可作為Python 機器學(xué)習(xí)研究應(yīng)用人員的參考用書。
本書編寫過程中,陳歡歌老師參與了部分章節(jié)的編寫以及文獻(xiàn)資料與數(shù)據(jù)的整理,機械工業(yè)出版社的王斌老師從選題策劃到章節(jié)安排都對本書提出了寶貴的建議。在此一并表示感謝。
在以大數(shù)據(jù)與人工智能技術(shù)為代表的新一輪科技浪潮的推動下,Python與機器學(xué)習(xí)也在迅猛發(fā)展并快速迭代,形成了方法豐富、分支多樣、應(yīng)用廣泛的整體態(tài)勢。要想全面而深入地掌握其全貌,就需要不斷學(xué)習(xí)與完善、不斷跟進(jìn)與提高。歡迎各位讀者不吝賜教,對本書不妥之處提出寶貴意見。
薛 薇
中國人民大學(xué)應(yīng)用統(tǒng)計科學(xué)研究中心
中國人民大學(xué)統(tǒng)計學(xué)院
薛薇,博士,中國人民大學(xué)應(yīng)用統(tǒng)計研究中心專職研究員,中國人民大學(xué)統(tǒng)計學(xué)院副教授。主要開設(shè)課程:機器學(xué)習(xí),計量經(jīng)濟學(xué),統(tǒng)計軟件,統(tǒng)計學(xué)。研究方向:機器學(xué)習(xí)與深度學(xué)習(xí)算法研究;陬櫩拖M行為大數(shù)據(jù)的客戶終身價值統(tǒng)計建模,以及營銷與品牌大數(shù)據(jù)的機器學(xué)習(xí)算法應(yīng)用。
目錄
前言
第1章 機器學(xué)習(xí)概述1
1.1 機器學(xué)習(xí)的發(fā)展:人工智能中的
機器學(xué)習(xí)1
1.1.1 符號主義人工智能1
1.1.2 基于機器學(xué)習(xí)的人工智能2
1.2 機器學(xué)習(xí)的核心:數(shù)據(jù)和數(shù)據(jù)建模4
1.2.1 機器學(xué)習(xí)的學(xué)習(xí)對象:數(shù)據(jù)集4
1.2.2 機器學(xué)習(xí)的任務(wù):數(shù)據(jù)建模6
1.3 機器學(xué)習(xí)的典型應(yīng)用11
1.3.1 機器學(xué)習(xí)的典型行業(yè)應(yīng)用11
1.3.2 機器學(xué)習(xí)在客戶細(xì)分中的應(yīng)用12
1.3.3 機器學(xué)習(xí)在客戶流失分析中的
應(yīng)用13
1.3.4 機器學(xué)習(xí)在營銷響應(yīng)分析中的
應(yīng)用14
1.3.5 機器學(xué)習(xí)在交叉銷售中的應(yīng)用15
1.3.6 機器學(xué)習(xí)在欺詐甄別中的應(yīng)用16
【本章總結(jié)】16
【本章習(xí)題】17
第2章 Python機器學(xué)習(xí)基礎(chǔ)18
2.1 Python:機器學(xué)習(xí)的首選工具18
2.2 Python的集成開發(fā)環(huán)境:
Anaconda19
2.2.1 Anaconda的簡介19
2.2.2 Anaconda Prompt的使用20
2.2.3 Spyder的使用22
2.2.4 Jupyter Notebook的使用23
2.3 Python第三方包的引用24
2.4 NumPy使用示例24
2.4.1 NumPy數(shù)組的創(chuàng)建和訪問25
2.4.2 NumPy的計算功能26
2.5 Pandas使用示例29
2.5.1 Pandas的序列和索引29
2.5.2 Pandas的數(shù)據(jù)框30
2.5.3 Pandas的數(shù)據(jù)加工處理31
2.6 NumPy和Pandas的綜合應(yīng)用:空氣質(zhì)量監(jiān)測數(shù)據(jù)的預(yù)處理和基本分析32
2.6.1 空氣質(zhì)量監(jiān)測數(shù)據(jù)的預(yù)處理32
2.6.2 空氣質(zhì)量監(jiān)測數(shù)據(jù)的基本分析34
2.7 Matplotlib的綜合應(yīng)用:空氣質(zhì)量監(jiān)測數(shù)據(jù)的圖形化展示36
2.7.1 AQI的時序變化特點37
2.7.2 AQI的分布特征及相關(guān)性分析38
2.7.3 優(yōu)化空氣質(zhì)量狀況的統(tǒng)計圖形40
【本章總結(jié)】41
【本章相關(guān)函數(shù)】41
【本章習(xí)題】47
第3章 數(shù)據(jù)預(yù)測與預(yù)測建模49
3.1 數(shù)據(jù)預(yù)測的基本概念49
3.2 預(yù)測建模50
3.2.1 什么是預(yù)測模型50
3.2.2 預(yù)測模型的幾何理解53
3.2.3 預(yù)測模型參數(shù)估計的基本策略56
3.3 預(yù)測模型的評價59
3.3.1 模型誤差的評價指標(biāo)60
3.3.2 模型的圖形化評價工具62
3.3.3 泛化誤差的估計方法64
3.3.4 數(shù)據(jù)集的劃分策略67
3.4 預(yù)測模型的選擇問題69
3.4.1 模型選擇的基本原則69
3.4.2 模型過擬合69
3.4.3 預(yù)測模型的偏差和方差71
3.5 Python建模實現(xiàn)73
3.5.1 ROC和P-R曲線圖的實現(xiàn)74
3.5.2 模型復(fù)雜度與誤差的模擬研究75
3.5.3 數(shù)據(jù)集劃分和測試誤差估計的實現(xiàn)79
3.5.4 模型過擬合以及偏差與方差的
模擬研究82
3.6 Python實踐案例86
3.6.1 實踐案例1:PM2.5濃度的
回歸預(yù)測86
3.6.2 實踐案例2:空氣污染的分類預(yù)測87
【本章總結(jié)】91
【本章相關(guān)函數(shù)】91
【本章習(xí)題】91
第4章 數(shù)據(jù)預(yù)測建模:貝葉斯分類器93
4.1 貝葉斯概率和貝葉斯法則93
4.1.1 貝葉斯概率93
4.1.2 貝葉斯法則94
4.2 貝葉斯和樸素貝葉斯分類器94
4.2.1 貝葉斯和樸素貝葉斯分類器的
一般內(nèi)容94
4.2.2 貝葉斯分類器的先驗分布96
4.3 貝葉斯分類器的分類邊界99
4.4 Python建模實現(xiàn)100
4.4.1 不同參數(shù)下的貝塔分布101
4.4.2 貝葉斯分類器和Logistic回歸
分類邊界的對比101
4.5 Python實踐案例103
4.5.1 實踐案例1:空氣污染的分類
預(yù)測103
4.5.2 實踐案例2:法律裁判文書中的
案情要素分類105
【本章總結(jié)】110
【本章相關(guān)函數(shù)】111
【本章習(xí)題】111
第5章 數(shù)據(jù)預(yù)測建模:近鄰分析112
5.1 近鄰分析:K-近鄰法112
5.1.1 距離:K-近鄰法的近鄰度量113
5.1.2 參數(shù)K:1-近鄰法還是K-近鄰法114
5.1.3 與樸素貝葉斯分類器和Logistic
回歸模型的對比117
5.2 基于觀測相似性的加權(quán)K-近鄰法117
5.2.1 加權(quán)K-近鄰法的權(quán)重117
5.2.2 加權(quán)K-近鄰法的預(yù)測119
5.2.3 加權(quán)K-近鄰法的分類邊界119
5.3 K-近鄰法的適用性120
5.4 Python建模實現(xiàn)122
5.4.1 不同參數(shù)K下的分類邊界122
5.4.2 不同核函數(shù)的特點123
5.4.3 不同加權(quán)方式和K下的分類邊界124
5.5 Python實踐案例125
5.5.1 實踐案例1:空氣質(zhì)量等級的
預(yù)測125
5.5.2 實踐案例2:國產(chǎn)電視劇的大眾
評分預(yù)測127
【本章總結(jié)】129
【本章相關(guān)函數(shù)】129
【本章習(xí)題】130
第6章 數(shù)據(jù)預(yù)測建模:決策樹131
6.1 決策樹概述131
6.1.1 什么是決策樹131
6.1.2 分類樹的分類邊界133
6.1.3 回歸樹的回歸平面134
6.1.4 決策樹的生長和剪枝135
6.2 CART的生長139
6.2.1 CART中分類樹的異質(zhì)性度量139
6.2.2 CART中回歸樹的異質(zhì)性度量140
6.3 CART的后剪枝141
6.3.1 代價復(fù)雜度和最小代價復(fù)雜度141
6.3.2 CART的后剪枝過程142
6.4 Python建模實現(xiàn)143
6.4.1 回歸樹的非線性回歸特點144
6.4.2 樹深度對分類邊界的影響145
6.4.3 基尼系數(shù)和熵的計算146
6.5 Python實踐案例147
6.5.1 實踐案例1:空氣污染的預(yù)測
建模147
6.5.2 實踐案例2:醫(yī)療大數(shù)據(jù)應(yīng)用—
藥物適用性研究151
【本章總結(jié)】154
【本章相關(guān)函數(shù)】155
【本章習(xí)題】155
第7章 數(shù)據(jù)預(yù)測建模:集成學(xué)習(xí)156
7.1 集成學(xué)習(xí)概述157
7.1.1 高方差問題的解決途徑157
7.1.2 從弱模型到強模型的構(gòu)建157
7.2 基于重抽樣自舉法的集成學(xué)習(xí)158
7.2.1 重抽樣自舉法158
7.2.2 袋裝法158
7.2.3 隨機森林161
7.3 從弱模型到強模型的構(gòu)建163
7.3.1 提升法164
7.3.2 AdaBoost.M1算法165
7.3.3 SAMME算法和SAMME.R
算法170
7.3.4 回歸預(yù)測中的提升法172
7.4 梯度提升樹174
7.4.1 梯度提升算法174
7.4.2 梯度提升回歸樹178
7.4.3 梯度提升分類樹179
7.5 XGBoost算法181
7.5.1 XGBoost的目標(biāo)函數(shù)181
7.5.2 目標(biāo)函數(shù)的近似表達(dá)182
7.5.3 決策樹的求解183
7.6 Python建模實現(xiàn)185
7.6.1 單棵決策樹、弱模型和提升法的
預(yù)測對比186
7.6.2 提升法中高權(quán)重樣本觀測的特點187
7.6.3 AdaBoost回歸預(yù)測中損失函數(shù)的
選擇問題189
7.6.4 梯度提升算法和AdaBoost的
預(yù)測對比189
7.7 Python實踐案例191
7.7.1 實踐案例1:PM2.5濃度的
回歸預(yù)測191
7.7.2 實踐案例2:空氣質(zhì)量等級的
分類預(yù)測195
【本章總結(jié)】197
【本章相關(guān)函數(shù)】197
【本章習(xí)題】198
第8章 數(shù)據(jù)預(yù)測建模:人工神經(jīng)網(wǎng)絡(luò)200
8.1 人工神經(jīng)網(wǎng)絡(luò)的基本概念201
8.1.1 人工神經(jīng)網(wǎng)絡(luò)的基本構(gòu)成201
8.1.2 人工神經(jīng)網(wǎng)絡(luò)節(jié)點的功能202
8.2 感知機網(wǎng)絡(luò)203
8.2.1 感知機網(wǎng)絡(luò)中的節(jié)點203
8.2.2 感知機節(jié)點中的加法器204
8.2.3 感知機節(jié)點中的激活函數(shù)205
8.2.4 感知機的權(quán)重訓(xùn)練208
8.3 多層感知機及B-P反向傳播算法213
8.3.1 多層網(wǎng)絡(luò)的結(jié)構(gòu)213
8.3.2 多層網(wǎng)絡(luò)的隱藏節(jié)點214
8.3.3 B-P反向傳播算法216
8.3.4 多層網(wǎng)絡(luò)的其他問題218
8.4 Python建模實現(xiàn)220
8.4.1 不同激活函數(shù)的特點220
8.4.2 隱藏節(jié)點的作用222
8.5 Python實踐案例223
8.5.1 實踐案例1:手寫體郵政編碼的
識別223
8.5.2 實踐案例2:PM2.5濃度的回歸
預(yù)測225
【本章總結(jié)】227
【本章相關(guān)函數(shù)】227
【本章習(xí)題】227
第9章 數(shù)據(jù)預(yù)測建模:支持向量機229
9.1 支持向量分類概述229
9.1.1 支持向量分類的基本思路229
9.1.2 支持向量分類的幾種情況232
9.2 完全線性可分下的支持向量分類233
9.2.1 如何求解超平面233
9.2.2 參數(shù)求解的拉格朗日乘子法235
9.2.3 支持向量分類的預(yù)測238
9.3 廣義線性可分下的支持向量分類238
9.3.1 廣義線性可分下的超平面239
9.3.2 廣義線性可分下的錯誤懲罰和
目標(biāo)函數(shù)240
9.3.3 廣義線性可分下的超平面參數(shù)
求解241
9.4 線性不可分下的支持向量分類242
9.4.1 線性不可分問題的一般解決方式242
9.4.2 支持向量分類克服維災(zāi)難的途徑244
9.5 支持向量回歸247
9.5.1 支持向量回歸的基本思路247
9.5.2 支持向量回歸的目標(biāo)函數(shù)和
約束條件249
9.6 Python建模實現(xiàn)252
9.6.1 支持向量機分類的意義252
9.6.2 完全線性可分下的最大邊界超
平面254
9.6.3 不同懲罰參數(shù)C下的最大邊界
超平面255
9.6.4 非線性可分下的空間變化255
9.6.5 不同懲罰參數(shù)C和核函數(shù)下的
分類曲面257
9.6.6 不同懲罰參數(shù)C和? 對支持
向量回歸的影響257
9.7 Python實踐案例258
9.7.1 實踐案例1:物聯(lián)網(wǎng)健康大數(shù)據(jù)
應(yīng)用——老年人危險體位預(yù)警259
9.7.2 實踐案例2:汽車油耗的回歸
預(yù)測263
【本章總結(jié)】266
【本章相關(guān)函數(shù)】266
【本章習(xí)題】266
第10章 特征選擇:過濾、包裹和
嵌入策略267
10.1 特征選擇概述267
10.2 過濾式策略下的特征選擇268
10.2.1 低方差過濾法269
10.2.2 高相關(guān)過濾法中的方差分析270
10.2.3 高相關(guān)過濾法中的卡方檢驗274
10.2.4 其他高相關(guān)過濾法276
10.3 包裹式策略下的特征選擇278
10.3.1 包裹式策略的基本思路278
10.3.2 遞歸式特征剔除法279
10.3.3 基于交叉驗證的遞歸式特征
剔除法280
10.4 嵌入式策略下的特征選擇281
10.4.1 嶺回歸和Lasso回歸281
10.4.2 彈性網(wǎng)回歸285
10.5 Python建模實現(xiàn)288
10.5.1 高相關(guān)過濾法中的F分布和卡方
分布289
10.5.2 不同L2范數(shù)率下彈性網(wǎng)回歸的
約束條件特征290
10.6 Python實踐案例290
10.6.1 實踐案例1:手寫體郵政編碼數(shù)據(jù)的
特征選擇——基于過濾式策略291
10.6.2 實踐案例2:手寫體郵政編碼數(shù)據(jù)的
特征選擇——基于包裹式策略293
10.6.3 實踐案例3:手寫體郵政編碼數(shù)據(jù)的
特征選擇——基于嵌入式策略294
【本章總結(jié)】298
【本章相關(guān)函數(shù)】298
【本章習(xí)題】299
第11章 特征提。嚎臻g變換策略300
11.1 特征提取概述300
11.2 主成分分析301
11.2.1 主成分分析的基本出發(fā)點302
11.2.2 主成分分析的基本原理303
11.2.3 確定主成分305
11.3 矩陣的奇異值分解307
11.3.1 奇異值分解的基本思路307
11.3.2 基于奇異值分解的特征提取308
11.4 核主成分分析309
11.4.1 核主成分分析的出發(fā)點309
11.4.2 核主成分分析的基本原理311
11.4.3 核主成分分析中的核函數(shù)312
11.5 因子分析315
11.5.1 因子分析的基本出發(fā)點315
11.5.2 因子分析的基本原理316
11.5.3 因子載荷矩陣的求解318
11.5.4 因子得分的計算319
11.5.5 因子分析的其他問題320
11.6 Python建模實現(xiàn)323
11.6.1 主成分分析的空間變換323
11.6.2 核主成分分析的空間變換324
11.6.3 因子分析的計算過程