機器學習基礎

機器學習本質包含了數學原理推導與實際應用技巧python

推論事情的方法:演繹法和概括法。
根據經驗進行推論,就像人成長同樣。算法

基礎:macos

  • 機器學習的目的是:概括(Induction), 從詳細事實到通常推論
  • 找出有效的預測模型api

    1. 一開始都是從一個簡單的模型開始
    2. 藉由不斷喂入訓練數據,修改模型
    3. 不斷提高預測績效

機器學習的步驟:python2.7

  • 使用者的行爲
  • 收集資料
  • 數據轉換與清洗
  • 創建模型
  • 驗證模型 (創建模型 和 驗證模型 之間反覆訓練與驗證)
  • 部署模型

機器學習須要什麼?
算法,數據,程序,評估,應用。機器學習

應用的方面:
數據挖掘,圖像識別,語音和天然語言,統計學習,計算機視覺。工具

虛擬環境

  1. 經過virtualenv來建立虛擬環境
  2. 經過anaconda來建立虛擬環境
virtualenv

virtualenv就是用來爲每個項目建立一套「獨立隔離」的Python運行環境的工具學習

pip install virtualenv

建立虛擬環境: virtualenv -p /usr/bin/python2.7 --no-site-packages venvs
啓動虛擬環境: source venvs/bin/activate
退出虛擬環境: deactivate
刪除虛擬環境: rm -r venvs測試

virtualenv -p /usr/local/bin/python --no-site-packages learn
source learn/bin/activate
deactivate
rm -r learn

能夠一次性經過別的機器上或虛擬環境裏,將文件裏羅列的第三方庫安裝起來:
pip install -r requirements.txtui

anaconda

安裝anacondaanaconda download

# 查看幫助
conda -h 
# 基於python3.6版本建立一個名字爲python36的環境
conda create --name python36 python=3.6 
# 激活此環境
source activate python36  
# 再來檢查python版本,顯示是 3.6
python -V  
# 退出當前環境
source deactivate python36 
# 刪除該環境
conda remove -n python36 --all
# 或者 
conda env remove  -n python36

# 查看因此安裝的環境
conda info -e

scikit-learn

scikit-learn官網

機器學習地圖:

clipboard.png

  • 必定量的樣本
  • classification
  • clustering
  • regression
  • dimensionality reduction
機器學習問題分類
  • 監督式學習
    迴歸分析:連續性數值,使用一組已知對應值的數據產生的模型,預測新數據的對應值。
    分類問題:類別標籤,根據已知標籤的訓練數據集,產生一個新模型,用以預測測試數據集的標籤。
  • 非監督式學習
    下降維度:產生一有最大變異數的字段線性組合,可用來下降本來問題的維度與複雜度
    分羣問題:物以類聚(近朱者赤,近墨者黑)

利用正確的答案的數據來進行學習,就能夠稱之爲監督式學習。
經過既有的答案來獲得新的理論,調整一些演算的過程,創建模型。

一樣或者相似的數據放在一塊兒,透過放在一塊兒的數據,分析學習,找到須要知道的答案,稱之爲非監督式學習。

迴歸分析

  • 線性迴歸是研究單一因變量與一個或上一個自變量之間的關係
  • 線性迴歸有兩個主要用處:
    預測指的是用已觀察的變量來預測因變量
    因果分析則是將自變量看成因變量發生的緣由
線性迴歸

數學模型:

y = ax + b # 簡單線性迴歸
y = ax^2 + bx + c # 二項式線性迴歸

最小平方估計法:
找出殘差平方和最小的一條線

  • 殘差計算公式
  • 殘差平方和計算公式

繪製資料:

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv('Data/salary.csv', index_col=0)
X = df[['year']]
Y = df['salary'].values

plt.scatter(X, Y, color='blue')
plt.xlabel('year')
plt.ylabel('salary')

plt.show()

clipboard.png

繪製迴歸線:

import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression

df = pd.read_csv('Data/salary.csv', index_col=0)
X = df[['year']]
Y = df['salary'].values

plt.scatter(X, Y, color='blue')
plt.xlabel('year')
plt.ylabel('salary')

# 使用scikit-learn進行預測
regr = LinearRegression()
regr.fit(X, Y)

# 將回歸線繪製在圖上
print('Coefficients:', regr.coef_) # 漲幅
print('Intercept:', regr.intercept_)

plt.plot(X, regr.predict(X), color='green', linewidth=3)

plt.show()

clipboard.png

二次項線性迴歸:

import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

df = pd.read_csv('Data/salary.csv', index_col=0)
X = df[['year']]
Y = df['salary'].values

# 使用scikit-learn進行預測
poly_reg = PolynomialFeatures(degree=2)  # 二次項
X_ = poly_reg.fit_transform(X)


regr = LinearRegression()
regr.fit(X_, Y)

X2 = X.sort_values(['year'])
X2_ = poly_reg.fit_transform(X2)

plt.scatter(X, Y, color='blue')
plt.plot(X2, regr.predict(X2_), color='green', linewidth=3)
plt.xlabel('year')
plt.ylabel('salary')

# 將回歸線繪製在圖上
print('Coefficients:', regr.coef_)
print('Intercept:', regr.intercept_)

plt.show()
迴歸模型評估

驗證線性關係是顯著的
驗證方法經過「假設」
目的:自變量是否有能力去影響自變量。

import pandas as pd
from matplotlib import pyplot as plt
import statsmodels.api as sm

df = pd.read_csv('Data/house-prices.csv')

# 創建Dummy Variable
s = pd.get_dummies(df['Brick']) # 根據字段中的值,創建新的字段,並新的字段的值爲0或1 # 必須去掉一個字段,去掉的這個字段經過其它一個字段生成。(若是同時存在,會產生共線性問題)
t = pd.get_dummies(df['Neighborhood']) # 必須去掉一個字段,去掉的這個字段經過其它二個字段生成。

house = pd.concat([df, s, t], axis=1)

del house['No']
del house['West']
del house['Brick']
del house['Neighborhood']
del house['Home']

X = house[['SqFt', 'Bedrooms', 'Bathrooms', 'Offers', 'Yes', 'East', 'North']]
Y = house['Price'].values

X2 = sm.add_constant(X)
est = sm.OLS(Y, X2)
est2 = est.fit()
print(est2.summary()) # 迴歸模型評估數據

clipboard.png

  • 假設顯著性標準是0.01
  • 推翻假設的標準是p值 < 0.01 (假設不成立,能夠推導出兩者變量是密切聯繫)
  • t = 2.658, P(>t)=0.009, P(0.09) < 0.01是不成立的,假設也不成立
  • 驗證兩者關係顯著

clipboard.png

R-squared: 可做爲自變量預測因變量準確度的指標。 值越大越準確,0.5以上能夠做爲指標。
AIC: 鼓勵數據擬合的優良性可是儘可能避免出現過分擬合的狀況。因此優先考慮的模型應該是AIC值最小的那一個.

分析房天下的上海徐彙區數據
import pandas as pd
import time
from sklearn.linear_model import LinearRegression
from matplotlib import pyplot as plt
import statsmodels.api as sm

df = pd.read_excel('Data/house_price_regression.xlsx')

# 處理數據
now_year = time.localtime(time.time()).tm_year
df['age'] = df['age'].map(lambda e: now_year - int(e.strip().strip('建築年代:')) )
df[['room', 'living_room']] = df['layout'].str.extract(r'(\d+)室(\d+)廳') # 抽取字段, 房間和廳
df['room'] = df['room'].astype(int)
df['living_room'] = df['living_room'].astype(int)
df['total_floor'] = df['floor_info'].str.extract(r'共(\d+)層')
df['total_floor'] = df['total_floor'].astype(int)
df['floor'] = df['floor_info'].str.extract(r'^(.)層')
df['direction'] = df['direction'].map(lambda e: e.strip())

del df['layout']
del df['floor_info']
del df['title']
del df['url']

# 將values處理成字段
df = pd.concat([df, pd.get_dummies(df['direction']), pd.get_dummies(df['floor'])], axis=1)

del df['direction']
del df['floor']
del df['南北向']
del df['低']


# 繪製散佈圖
# 房價 與 平米
df[['price', 'area']].plot(kind='scatter', x='area', y='price', figsize=[10, 5])


# 繪製線性模型
x = df[['area']]
y = df['price']
regr = LinearRegression()
regr.fit(x, y)

print('Coefficent: {}'.format(regr.coef_))
print('Intercept: {}'.format(regr.intercept_))

plt.scatter(x, y, color='blue')
plt.plot(x, regr.predict(x), linewidth=2, color='red')
plt.xlabel('area')
plt.ylabel('price')

# 多元迴歸預測
df_col = list(df.columns)
del df_col[2]
x = df[df_col]
y = df['price']
regr = LinearRegression()
regr.fit(x, y)
print(x.info())

# 評估迴歸模型
x2 = sm.add_constant(x)
est = sm.OLS(y, x2)
est2 = est.fit()
print(est2.summary())

plt.show()

資料分類

監督式學習

分類問題:根據已知標籤的訓練數據集,產生一個新模型,用以預測測試數據集的標籤

決策樹:

  • 用於計算一個系統中的失序現象,也就是計算該系統混亂的程度。
  • 決策樹的目的行爲上的預測和實質的分類

單一變量的計算:

Entropy = -p * log * p - q * log * q

clipboard.png

多變量的計算:

clipboard.png

clipboard.png

相關文章
相關標籤/搜索