本文是視頻學習筆記
監督學習(supervised learning):有數據和標籤 如classification,regression
無/非監督學習(unspervised learning):只有數據沒有標籤clustering
半監督學習:結合了監督學習和無監督學習,如只有少部分有標籤
強化學習(reinforcement learning):從經驗中總結提升
遺傳算法(genetic algorithm):與強化學習類似,適者生存不適者淘汰
(一) sklearn 簡單介紹介紹
sklearn全程圖
一個使用scikit learn的例子:以knn爲例
import numpy as np
from sklearn import datasets
from sklearn.cross_validation import train_test_split
from sklearn.neighbors import KNeighborsClassifier #導入k近鄰分類器
iris = datasets.load_iris() #sklearn的數據集中有很多數據,這裏導入iris這種花的數據
iris_X = iris.data #數據
iris_y = iris.target #標籤
#print(iris_X[:2,:]) #輸出前兩行,即前兩個數據,一行表示一個數據,一個數據可以有多個屬性,即列
#print(iris_y)
#開始訓練數據,使用train_test_split模塊測試數據佔30%
X_train,X_test,y_train,y_test = train_test_split(iris_X,iris_y,test_size=0.3)
#print(y_train)
knn = KNeighborsClassifier()
knn.fit(X_train,y_train) #開始訓練數據
#輸出預測值和真實值
print(knn.predict(X_test)) #訓練後的預測值
print(y_test) #真實值
另外,可以選擇load_iris(return_X_y=True),表示返回data和target,默認是false,表示返回的是字典。比如
>>> iris
結果爲:
可以看到iris是一個包含兩個數組的字典。而如果直接選擇爲True就可以直接得到這兩個數組
iris有三種類別,可以通過下面打印出來
最後,最上面的代碼結果如下:第一批是預測值,第二批是真實值,可以看到很接近
(二)sklearn數據集
鏈接:sklearn-datasets
數據集中有已經存在的data,當要調用的時候直接datasets.load…即可,也可以datasets.make…自己生成數據。
1)從數據集導入數據
以Boston房價爲例
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target
model = LinearRegression()
model.fit(data_X,data_y)
print(model.predict(data_X[:4,:])) #測試值,只測試前四個數據
print(data_y[:4]) #真實值
上面的model = LinearRegression()括號裏爲空表示採用了默認值,當然也可以自己調,可以參考:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
第一行表示測試數據,第二行表示真實值,看到有一定差別。想提高準確度有兩個方法:
- 嘗試不同model
- 嘗試不同參數
- 嘗試將data先normalise再使用
- …
**補充1:**除了上面的輸出結果之外還可以輸出係數,比如
在上面例子中分別表示房子面積,採光,地段等等,const表示與y軸交點。現在要把前面的輸出,可以採用如下
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target
model = LinearRegression()
model.fit(data_X,data_y)
#以y = 0.1x + 0.3爲例
print(model.coef_) #coefficent,輸出係數 0.1
print(model.intercept_) #跟y軸的交點座標,即0.3
表示
**補充2:**查看都有哪些參數
查看LinearRegression()有哪些參數
print(model.get_params())
這些參數正是我們在上面圖中看到的。n_jobs=1表示用一個核。
**補充3:**輸出準確度
##data_X做預測,data_y作爲真實值
print(model.score(data_X,data_y))
>>> 0.7406077428649428
準確度爲74%
2)自己生成數據來練習
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
X,y = datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=1)
plt.scatter(X,y)
plt.show()