天天看點

python-Sklearn庫基本屬性Sklearn算法庫

Sklearn

  • 基本屬性
  • Sklearn算法庫
    • 1.K近鄰算法kNN
    • 2.樸素貝葉斯算法
    • 3邏輯回歸
    • 4支援向量機
    • 5內建方法-随機森林
    • 6內建方法——Adaboost
    • 7內建方法-梯度提升樹GBDT

基本屬性

Scikit-learn(sklearn)是機器學習中常用的第三方子產品,對常用的機器學習方法進行了封裝,包括回歸(Regression)、降維(Dimensionality Reduction)、分類(Classfication)、聚類(Clustering)等方法。當我們面臨機器學習問題時,便可根據下圖來選擇相應的方法。Sklearn具有以下特點:

1 簡單高效的資料挖掘和資料分析工具

2 讓每個人能夠在複雜環境中重複使用

3 建立NumPy、Scipy、MatPlotLib之上

#Sklearn庫
#Sklearn庫是當今最流行的機器學習算法庫之一 可用來解決分類與回歸問題
from sklearn import datasets
import matplotlib as plt
from sklearn.preprocessing import LabelEncoder
import seaborn as sns
#1下載下傳資料集
iris=sns.load_dataset('iris')
#2資料集檢視
print(type(iris))
print(iris.shape)
print(iris.head())
print(iris.info())
print(iris.describe())
print(iris.species.value_counts())
sns.pairplot(data=iris,hue="species")#圖 檢視各個特征相關性
#3标簽清洗
iris_simple=iris.drop(["sepal_length","sepal_width"],axis=1)
print(iris_simple.head())
#4标簽編碼
encoder=LabelEncoder()
iris_simple["species"]=encoder.fit_transform(iris_simple["species"])
print(iris_simple)
#5
#5資料集的标準化
trans=StandardScaler()
_iris_simple=trans.fit_transform(iris_simple[["petal_length","petal_width"]])
_iris_simple=pd.DataFrame(_iris_simple,columns=["petal_length","petal_width"])
print(_iris_simple.describe())

#6建構訓練集和測試集(暫不考慮驗證集)
from sklearn.model_selection import train_test_split
train_set,test_set=train_test_split(iris_simple,test_size=0.2)
print(test_set.head())
print(test_set.shape)

iris_x_train=train_set[["petal_length","petal_width"]]
print(iris_x_train.head())

iris_y_train=train_set["species"].copy()
print(iris_y_train.head())

iris_x_test=test_set[["petal_length","petal_width"]]
print(iris_x_test.head())

iris_y_test=test_set["species"].copy()
print(iris_y_test.head())
           

Sklearn算法庫

1.K近鄰算法kNN

代碼如下(示例):

#與待預測點最近的訓練資料集中的k個鄰居 把其中最常見的類别預測為待預測點的類别
from sklearn.neighbors import KNeighborsClassifier
#建構分類器對象
clf=KNeighborsClassifier()
print(clf)
#訓練
clf.fit(iris_x_train,iris_y_train)
#預測
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#翻轉
print(encoder.inverse_transform(res))
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
#2存儲資料
out=iris_x_test.copy()
out["y"]=iris_y_test
out["pre"]=res
print(out)
out.to_csv("iris_predict.csv")
#3可視化
def draw(clf):
    # 網絡化
    M,N=500,500
    x1_min,x2_min=iris_simple[["petal_length","petal_width"]].min(axis=0)
    x1_max,x2_max=iris_simple[["petal_length","petal_width"]].max(axis=0)
    t1=np.linspace(x1_min,x1_max,M)
    t2=np.linspace(x2_min,x2_max,M)
    x1,x2=np.meshgrid(t1,t2)
    #預測
    x_show=np.stack((x1.flat,x2.flat),axis=1)
    y_predict=clf.predict(x_show)
    #配色
    cm_light=mpl.colors.ListedColormap(["#A0FFA0","#FFA0A0","#A0A0FF"])
    cm_dark=mpl.colors.ListedColormap(["g","r","b"])
    #繪制預測區域圖
    plt.figure(figsize=(10,6))
    plt.pcolormesh(t1,t2,y_predict.reshape(x1.shape),cmap=cm_light)
    #繪制原始資料點
    plt.scatter(iris_simple["petal_length"],iris_simple["petal_width"],label=None,
                c=iris_simple["species"],cmap=cm_dark,marker='o',edgecolors='k')
    plt.xlabel("petal_length")
    plt.ylabel("petal_width")
    #繪制圖例
    color=["g","r","b"]
    species=["setosa","virginica","versicolor"]
    for i in range(3):
        plt.scatter([],[],c=color[i],s=40,label=species[i])#利用空點繪制圖例
    plt.legend(loc="best")
    plt.title('iris_classfier')
    plt.show()

           

2.樸素貝葉斯算法

代碼如下(示例):

from sklearn.naive_bayes import GaussianNB
#建構分類器對象
clf=GaussianNB()
print(clf)
#訓練
clf.fit(iris_x_train,iris_y_train)
#預測
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
draw(clf)

#樸素貝葉斯
#CATRT算法:每次通過一個特征,将資料盡可能分為純淨的兩類,遞歸的分下去
from sklearn.tree import DecisionTreeClassifier
#建構分類器對象
clf=DecisionTreeClassifier()
print(clf)
#訓練
clf.fit(iris_x_train,iris_y_train)
#預測
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
draw(clf)

           

3邏輯回歸

#訓練:通過一個映射方式,将特征X=(x1,x2)映射成P(y=ck),求使得所有機率之積最大化的映射方式裡的參數
#預測:計算p(y=ck)取機率最大的那個類别作為預測對象的分類
from sklearn.linear_model import LogisticRegression
clf=LogisticRegression(solver='saga',max_iter=1000)
print(clf)
#訓練
clf.fit(iris_x_train,iris_y_train)
#預測
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
draw(clf)
           

4支援向量機

#以二分類為例 假設資料可以完全分開
#用一個超平面将兩類資料完全分開,且最近點到平面距離最大
from sklearn.svm import SVC
clf=SVC()
print(clf)
clf.fit(iris_x_train,iris_y_train)
#預測
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
draw(clf)
           

5內建方法-随機森林

#訓練集m,有放回随機取m個資料,構成一組,共抽取n組采樣集
#n組采樣集訓練得到n個弱分類器 弱分類器一般用決策樹或神經網絡
#将n個弱分類器進行組合得到強分類器
from sklearn.ensemble import RandomForestClassifier
clf=RandomForestClassifier()
print(clf)
clf.fit(iris_x_train,iris_y_train)
#預測
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
draw(clf)
           

6內建方法——Adaboost

#訓練集m,用初始資料權重訓練得到第一個弱分類器,根據誤差率計算弱分類器系數,更新資料的權重
#使用新的權重訓練得到第二個弱分類器,以此類推
#根據各自系數,将是以弱分類器權重求和獲得強分類器
from sklearn.ensemble import AdaBoostClassifier
from sklearn.naive_bayes import GaussianNB
clf=AdaBoostClassifier()
print(clf)
clf.fit(iris_x_train,iris_y_train)
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
draw(clf)

           

7內建方法-梯度提升樹GBDT

#訓練集m,獲得第一個弱分類器 獲得殘差,然後不斷拟合殘差
#所有弱分類器相加得到強分類器
from sklearn.ensemble import GradientBoostingClassifier
clf=GradientBoostingClassifier()
print(clf)
clf.fit(iris_x_train,iris_y_train)
res=clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#評估
accuracy=clf.score(iris_x_test,iris_y_test)
print("預測正确率:{:.0%}".format(accuracy))
draw(clf)

           

sklearn 官方文檔中文版(0.22.1)