1.肯定特徵
(1)數據探索
(2)數據預處理
2.肯定模型
(1)肯定目標函數
3.模型訓練
(1)肯定優化算法,估計模型參數
4.模型選擇
選擇不一樣參數下的模型。
5.模型評估
對所選擇的模型進行評估:估計模型在未知數據上的性能(泛化能力).html
以上5個過程不斷迭代,直到尋找到一個最優的模型和其參數。python
如下,以波士頓房價預測爲例,先簡單講講數據探索。
通常咱們拿到一堆數據以後,並不知道數據有何規律,爲了瞭解數據特徵的規律(機率分佈),咱們第一個步驟就是數據探索,
探索數據的特徵有何規律或者分佈,爲模型選擇奠基基礎。web
數據探索包括:
(1) 數據規模。
(2) 數據類型,肯定是否須要進一步編碼。
(3) 數據是否有缺失值,若是有則進行數據填補。
(4) 查看數據分佈,是否有異常數據點,若是有則進行離羣點處理。
(5) 查看是否須要降維:查看兩兩特徵之間的關係,看數據是否有相關(冗餘)。算法
數據處理工具包爲:Numpy,SciPy,pandas,其中SciPy,pandas是基於Numpy進一步的封裝
數據可視化工具包爲:Matplotlib,Seaborn,其中Seaborn是基於Matplotlib進一步的封裝windows
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns #將matplotlib的圖表直接嵌入到Notebook之中 %matplotlib inline
將matplotlib的圖表直接嵌入到Notebook之中.
IPython提供了許多魔法命令。魔法命令都以%或者%%開頭,以%開頭的成爲行命令,%%開頭的稱爲單元命令。行命
令只對命令所在的行有效,而單元命令則必須出如今單元的第一行,對整個單元的代碼進行處理。執行%magic能夠
查看關於各個命令的說明,而在命令以後添加?能夠查看該命令的詳細說明:
%matplotlib?數組
read_csv與to_csv 是一對輸入輸出的工具,read_csv直接返回pandas.DataFrame,而to_csv只要執行命令便可寫文件
header: 表示數據中是否存在列名,若是在第0行就寫就寫0,而且開始讀數據時跳過相應的行數,不存在能夠寫none。
names: 表示要用給定的列名來做爲最終的列名。
encoding:表示數據集的字符編碼,一般而言一份數據爲了方便的進行文件傳輸都以utf-8做爲標準。app
dpath = './data/' data = pd.read_csv(dpath + "boston_housing.csv") #返回的是DataFrame類型
df.head(n):查看DataFrame對象的前n行,默認是5行
data.tail(n):查看DataFrame對象的後n行,默認是5行
data.info(): 查看索引、數據類型和內存信息
data.isnull():檢查DataFrame對象中的空值,並返回一個Boolean數組 data.describe():查看數值型列的彙總統計 機器學習
data.head(5) #查看DataFrame對象的前5行數據
data.tail(5) #查看DataFrame對象的後5行數據
data.info() #查看索引、數據類型和內存信息
data.isnull().sum() #檢查DataFrame對象中的是否存在空值
data.describe() #查看數值型列的彙總統計
此處獲得各屬性的樣本數目、均值、標準差、最小值、1/4分位數(25%)、中位數(50%)、3/4分位數(75%)、最大值
可初步瞭解各特徵的分佈ide
a:數據, bins:箱子數,kde:是否進行核密度估計函數
from matplotlib.font_manager import FontProperties #添加相關包,指定相關字體 font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12) # 房價(即目標)的直方圖 sns.distplot(data.MEDV.values, bins=30,kde=True) plt.xlabel(u"房價分佈",fontproperties=font_set) plt.show()
# 犯罪率的直方圖
sns.distplot(data.CRIM.values, bins=30, kde=False) plt.xlabel(u"犯罪率直方圖", fontproperties=font_set) plt.show()
犯罪率特徵的分佈是長尾分佈,和指數分佈比較接近。大部分城鎮的犯罪率很低,極少數樣本的犯罪率高。從常理看,
該數值應該比較準確,能夠不予處理。
# 房價(即目標)的散點圖
plt.scatter(range(data.shape[0]), data.MEDV.values, color='purple') plt.title(u"房價的散點分佈",fontproperties=font_set)
能夠看出,數據大多集中在均值附近,和正態分佈比較接近。但最大值50的樣本數目偏多,多是原始數據將全部大於50的
樣本的值都設置爲50(猜想),在模型訓練時也能夠考慮將y等於50的樣本當成outliers(離羣點)去掉。
計數圖,可將它認爲一種應用到分類變量的直方圖,用以統計不一樣的類別的計數值:
order:控制變量繪圖的順序
#sns.countplot(data.ZN)
#sns.countplot(data.CHAS, order=[0,1]) #與下面等價 sns.countplot(data.CHAS)
sns.countplot(data.RAD)
a.但願特徵與標籤之間強相關
b.若是特徵和特徵之間強相關,說明信息冗餘,可經常使用處理方法:
1)兩個特徵之間只保留其中一個特徵。
2)採用組成分析(PCA)等進行降維。
3)在模型的正則項採用L1正則。
data:矩陣數據集,可使numpy的數組(array),若是是pandas的dataframe,則dataframe的index/column信息會分別對應
到heatmap的columns和rows。
linewidths:熱力圖矩陣之間的間隔大小。
vmax,vmin:圖例中最大值和最小值的顯示值,沒有該參數時默認不顯示。
annot : bool or rectangular dataset, optional,If True, write the data value in each cell,顯示數值。
mask : boolean array or DataFrame, optional。If passed, data will not be shown in cells where mask is True.
cbar : boolean, optionalWhether to draw a colorbar.
plt.subplots(figsize=(13,9)) #指定窗口尺寸(單位英尺) data_corr=data.corr().abs() #返回列與列之間的相關係數 #數據爲相關係數,顯示數值,顯示顏色條 sns.heatmap(data_corr, annot=True)
參數key是關鍵詞, lambda是一個隱函數,是固定寫法,表示按照列表x的-abs(x[0])這個值進行排序,其中x可爲任意名稱,
指代前面的列表list。
cols = data.columns #獲取列的名稱 corr_list = [] size = data.shape[1] for i in range(0, size): for j in range(i+1, size): if(abs(data_corr.iloc[i,j])>= 0.5): corr_list.append([data_corr.iloc[i,j], i, j]) #data_corr.iloc[i,j]:按位置選取數據 sorted_corr_list = sorted(corr_list, key=lambda xx:-abs(xx[0])) for v,i,j in sorted_corr_list: print("%s and %s = %.2f" % (cols[i], cols[j],v)) # cols: 列名
一般認爲相關係數大於0.5的爲強相關,能夠看出相關係數大於0.5的特徵較多,可對數據進行降維處理,例如去掉一個特徵,
或者使用主成分分析(PCA),L1正則等進行處理。
數據指定:
vars : 與data使用,不然使用data的所有變量。參數類型:numeric類型的變量list。
{x, y}_vars : 與data使用,不然使用data的所有變量。參數類型:numeric類型的變量list。即指定x,y數據。
dropna : 是否剔除缺失值。參數類型:boolean, optional.
特殊參數: kind : {‘scatter’, ‘reg’}, optional Kind of plot for the non-identity relationships.
diag_kind : {‘hist’, ‘kde’}, optional。Kind of plot for the diagonal subplots.
基本參數:
size : 默認 6,圖的尺度大小(正方形)。參數類型:numeric
hue : 使用指定變量爲分類變量畫圖。參數類型:string (變量名).
hue_order : list of strings Order for the levels of the hue variable in the palette.
palette : 調色板顏色.
markers : 使用不一樣的形狀。參數類型:list.
aspect : scalar, optional。Aspect * size gives the width (in inches) of each facet.
{plot, diag, grid}_kws : 指定其餘參數。參數類型:dict
返回:
PairGrid 對象.
for v,i,j in sorted_corr_list: #繪製x_vars列和y_vars列特徵之間的關係,看是否有線性關係 sns.pairplot(data, size=6, x_vars=cols[i], y_vars=cols[j]) plt.show()
人工智能從入門到專家教程資料:https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.38270209gU11fS&id=562189023765