機器學習基礎——整合學習1

ckxllf發表於2021-03-16

  1.機器學習問題分類

  從資料集的角度看機器學習:資料集一般由自變數(x,特徵)和因變數(y,標籤)組成。

  根據所要處理的資料中有沒有因變數,機器學習可分為有監督學習和無監督學習:

  (1)有監督學習

  指所分析的資料集中既含有自變數,也有因變數,這也是我們最常遇到的機器學習任務。

  其中,根據因變數(y)是否連續,有監督學習又可分為迴歸問題(y連續)和分類問題(y離散)。(還有一類是排序問題,輸出y是一個序列)

  (2)無監督學習

  指所分析的資料集中只含有自變數,沒有因變數,建模的目的是學習資料本身的結構和關係。如聚類分析,降維分析等,這不是我們討論的重點。

  (3)強化學習

  實際上,我認為強化學習應該是獨立於上面兩類的一類新的問題,這個有機會再介紹。

  2.迴歸

  (1)首先我們可以匯入Boston資料集作為迴歸問題

  資料集中特徵含義具體可以自查~

  from sklearn import datasets

  boston = datasets.load_boston() # 返回一個類似於字典的類

  X = boston.data

  y = boston.target

  features = boston.feature_names

  boston_data = pd.DataFrame(X,columns=features)

  boston_data["Price"] = y

  boston_data.head() #檢視資料前幾行

  (2)繪圖分析

  繪圖的基礎就不說了,這裡介紹學到的兩個新功能:執行時間和繪圖風格

  %%time #可以用來檢視程式執行的時間

  %matplotlib inline

  plt.style.use("ggplot") #將繪圖風格調整為ggplot風格

  普通sns.scatterplot()作圖效果(以分析Price~NOX)為例:

  NOX:一氧化氮濃度(/千萬分之一)

  二者的繪圖效果自己去感受,我覺得後者繪圖逼格略高,有質感。但從繪製時間上來說,在美觀的同時,多花了一倍的時間(178ms)。

  可以明顯看出:在一氧化氮濃度低的地方的房價較高,反之相反,這符合直觀常識,畢竟汙染小的區域房源競爭激烈!

  這個關係更加明顯:犯罪率越低的區域,房價自然越高,符合常識。

  3.分類

  (1)匯入iris資料集作分析:

  from sklearn import datasets

  iris = datasets.load_iris()

  iris資料集中的特徵解釋:

  sepal length (cm):花萼長度(釐米)

  sepal width (cm):花萼寬度(釐米)

  petal length (cm):花瓣長度(釐米)

  petal width (cm):花瓣寬度(釐米)

  (2)繪圖觀察特徵

  # 視覺化特徵

  marker = ['s','x','o']

  for index,c in enumerate(np.unique(y)):

  plt.scatter(x=iris_data.loc[y==c,"sepal length (cm)"],y=iris_data.loc[y==c,"sepal width (cm)"],alpha=0.8,label=c,marker=marker[c])

  plt.xlabel("sepal length (cm)")

  plt.ylabel("sepal width (cm)")

  plt.legend() 大連人流哪家好 mobile.fkyy120.net/

  plt.show()

  程式碼中,介紹兩個語法:

  1)enumerate()是python的內建函式,對一個可迭代物件,用於既要遍歷索引又要遍歷元素時。enumerate還可以接收第二個引數,用於指定索引起始值。

  2)unique( )用於去除重複值,保留唯一值

  每種不同的顏色和點的樣式為一種型別的鳶尾花,資料集有三種不同型別的鳶尾花。

  4.無監督學習

  我們可以使用sklearn生成符合自身需求的資料集,這些資料集沒有因變數,可以用來模擬無監督學習。

  注:無監督資料樣本生成可訪問sklearn的API:

  sklearn-API: Samples generator.

  (1)生成無監督資料,並視覺化:

  # 生成月牙型非凸集

  from sklearn import datasets

  x, y = datasets.make_moons(n_samples=2000, shuffle=True,

  noise=0.05, random_state=None)

  for index,c in enumerate(np.unique(y)):

  plt.scatter(x[y==c,0],x[y==c,1],s=7)

  plt.show()

  (2)透過make_checkerboard函式生成一個棋盤資料集:

  # 生成棋盤資料集

  from sklearn import datasets

  n_clusters = (4, 3)

  data, rows, columns = datasets.make_checkerboard(

  shape=(300, 300), n_clusters=n_clusters, noise=10,

  shuffle=False, random_state=0)

  plt.matshow(data, cmap=plt.cm.Blues)

  plt.title("Original dataset")

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2763172/,如需轉載,請註明出處,否則將追究法律責任。

相關文章