ベースのsklearn単純な線形回帰、ロジスティック回帰、SVMおよび他の概要

sklearnベースのいくつかのAIアルゴリズムの基本的な操作

いくつかの関連ライブラリをsklearn

これらのライブラリは相関アルゴリズムに導入しました

import pandas as pd #导入一个用于读取csv数据的容器
from sklearn.model_selection import train_test_split #用于数据集划分的模块
from sklearn.model_selection import GridSearchCV #用于交叉验证的模块
from sklearn.neighbors import KNeighborsClassifier #knn算法的模块
from sklearn.linear_model import LinearRegression  #线性回归算法的模块
from sklearn.linear_model import LogisticRegression #逻辑回归算法模块
from sklearn.svm import SVC #SVC算法的模块
import matplotlib.pyplot as plt #可视化的绘图模块
import warnings #此处是用于忽视警告的模块,warnings.filterwarnings("ignore")语句忽视警告
from sklearn.preprocessing import OneHotEncoder, MinMaxScaler #特征预处理处理模块
import numpy as np 
from sklearn.preprocessing import OneHotEncoder, MinMaxScaler #特征预处理模块,one-hot编码和均一化处理

基本的な考え方;

タグ定義の特徴および目的 - >データセット全体を読む - >タグが特性データXYを設定読み取られる - >データ分割(テストセット、トレーニングセット) - >モデルアルゴリズムが宣言 - >トレーニングは、試験の精度を算出します

列に定義機能と目的

fruit_label = { 'apple': 0,'mandarin': 1,'orange': 2,'lemon': 3}  #用一个字典表示水果标签的映射关系,有监督的分类中需要用到

feature_data=['mass','width','height','color_score'] #用一个序列说明特征含有这几种

データセット全体を読みます

 data_fruit=pd.read_csv(文件路径) #读取整个csv文件中的数据

地図生成列ラベル(ラベルは、元のテキストの結果であるデジタル生成する)(KNN分類が必要とされる監督)

  data_fruit['Label']=data_fruit['fruit_name'].map(fruit_label) 
  #生成了一个新的标签列,列名是Lable,数据是根据fruit_name列数据生成的0-3的数据(0-3在上面定义了的)
  #也就有监督的分类中需要用到,有监督的预测貌似不用诶...

これらは、データタグや機能を読み取るように設定されています

 X=data_fruit[feature_data].values #读取了之前定义的特征序列中的列,作为X数组
 y=data_fruit['Label'].values #读取标签列中数据作为Y数组
 
 #data[key] 类型是pandas的series 类型的数据;而data[key].values 类型是numpy 的ndarray类型的数据

データ分割(トレーニングセット、テストセット)

#将整个数据集划分为4个部分特征的训练集、测试集,结果标签的训练集、测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1 / 3, random_state=10)
 
 #上述语句表示对X,y进行划分,其中测试集占整体数据的1/3,并且随机划分(防止原先数据有序排放使得某些标签数据没有得到训练)

声明アルゴリズムモデル、トレーニング、計算精度

算出した声明KNNアルゴリズム、トレーニング、精度

knn_model=KNeighborsClassifier()
knn_model.fit(X_train,y_train) #对训练集进行训练
accuracy=knn_model.score(X_test,y_test) #对测试集进行测试计算精度

計算免責線形回帰アルゴリズム、トレーニング、精度

  linear_reg_model = LinearRegression()
  linear_reg_model.fit(X_train, y_train)
  r2_score = linear_reg_model.score(X_test, y_test)
  
  #单个样本的取值;X_test[i, :]表示测试集中i行的全部数据
  

算出した声明ロジスティック回帰アルゴリズム、トレーニング、精度

  LogisticRegression_model=LogisticRegression()
  LogisticRegression_model.fit(X_train, y_train)
  r2_score =LogisticRegression_model.score(X_test, y_test)
 
 

計算SVM、トレーニング、精度の声明

  SVM_model=SVC()
  SVM_model.fit(X_train, y_train)
  accuracy= SVM_model.score(X_test, y_test)

最適(KにおけるKNN、Cにおけるロジスティックス回帰C、SVM)を見つけるために、スーパーパラメータ

思考の決定方法で、KNN K:

 定义一个K序列,放入想要测试的一些K的值,然后遍历K,重复进行上述基本操作(读取数据集中的特征标签、划分数据集、训练与测试)
 
 k_sets=[3,5,8]
 
 for k_set in k_sets:
    round_function(fruit_data,k_set)#这边需要fruit_data,所以定义这个函数要传入fruit_data参数
    
 def round_function(fruit_data,k_set):
    X=fruit_data[feature_data].values 
    y=fruit_data['Label'].values
    
    X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=1 / 3, random_state=10)
    
    knn_model=KNeighborsClassifier(n_neighbors=k_set)#再传入参数K进行验证,默认是5
    knn_model.fit(X_train,y_train)
    accuracy=knn_model.score(X_test,y_test)

    print('K为{}时候的精确度为{:.2f}%'.format(k_set,accuracy*100))

クロスバリデーション(グリッドサーチの場合)

クロスバリデーション:パラメータ調整試験(上最適なパラメータを決定するためのテスト)、トレーニングセットは、N個の部分に分割され、順番に各部分は、トライアルテストセットとしてNの一部であり、各精度を計算します度、N最後のシーク精度の平均値。Nは(倍)折り目の数を表します。

複数のパラメータにわたる既知のグリッドサーチを決定するために、sklearnは、2つのパラメータpとkの特徴、例えば、次のデバッグを必要とするk最近傍ケースGridSearchCV()プロセスを使用して

步骤:定义需要验证的字典-->遍历测试打印精确度
model_dict={
     'KNN': (KNeighborsClassifier(),{'n_neighbors':[3,5,7],'p':[1,2]}),
    'Logistic':(LogisticRegression(),{'C':[1e-2,1,1e2]}),
    'SVM':(SVC(),{'C':[1e-2,1,1e2] })
   }
 
#遍历比较
for model_name,(model,model_param) in model_dict.items():

    #训练模型,选出最好的参数
    clf=GridSearchCV(estimator=model, param_grid=model_param, cv=5) #放入算法模型、需要确定的参数、设置为5折交叉验证
    clf.fit(X_train,y_train)
    best_model=clf.best_estimator_
    
    #计算精确度
    acc=best_model.score(X_test,y_test)
    
    #打印比较
    print('{}的最好参数是{}准确度为{:.2f}%'.format(model_name,best_model,acc*100))

最適なアルゴリズムを見つけるには

良いアルゴリズム、トラバースの辞書の定義

   #定义好一个算法字典,将算法名和模型对应好
   model_dict={'KNN': KNeighborsClassifier(n_neighbors=7), 'Logistic':LogisticRegression(C=1), 'SVM':SVC(C=1) }
   
   #遍历比较
   for model_name,model in model_dict.items():
    #训练模型
    model.fit(X_train,y_train)
    #计算精确度
    acc=model.score(X_test,y_test)
    #打印比较
    print('{}的准确度为{:.2f}%'.format(model_name,acc*100))

注意を払います

項目()辞書をトラバースするとき健康を取った値に対応し、使用されています

可視化の描画

>デッサン - - >ディスプレイ(plt.show())グラフィックインスタンスを作成します(plt.figure()):matplotlibの、モジュール、描画方法の定義を描く基本的なライン描画処理コール

 def plot_fitting_line(linear_reg_model, X, y, feat):
    """
    绘制线型回归线
    """
    w = linear_reg_model.coef_  #使用coef_获得权重
    b = linear_reg_model.intercept_  # .intercept_ 获得偏置项

    plt.figure()#创建一个图形实例,相当于一个画布
    
    # 真实值的散点图
    plt.scatter(X, y, alpha=0.5) #绘制基于X轴(特征)的真实值的散点图,透明度为50%

    # 直线
    plt.plot(X, w * X + b, c='red')#绘制基于x轴(特征)的预测值的直线图,红线绘制
    plt.title(标题) #图像的标题
    plt.show() #显示图像

着信X、Y軸、および定義されたいくつかの他のパラメータを描画します

注意を払います

私たちは、上記のパラメータが渡されるの渡されたパラメータの種類の種類を使用する必要があります

前処理特性

特長に分けることができる:数値機能、順序付けられた特徴のタイプ、デジタルタイプは、特徴のタイプに対して、正規化されていてもよい特徴の種類(性別など)が、ワンホット符号化であってもよいです

ステップ:文Phyletic - >前処理 - >プロセスは、後メイン関数処理訓練試験で完了されます

# 使用的特征列
NUM_FEAT_COLS = ['AGE','BMI', 'BP', 'S1', 'S2','S3','S4','S5','S6']#数字型特征
CAT_FEAT_COLS=[ 'SEX']#类别型特征

#定义预处理方法,传入训练集和特征集的特征
def process_features(X_train, X_test):

# 1. 对类别型特征做one-hot encoding
encoder = OneHotEncoder(sparse=False)
encoded_tr_feat = encoder.fit_transform(X_train[CAT_FEAT_COLS])
encoded_te_feat = encoder.transform(X_test[CAT_FEAT_COLS])
#因为这边需要通过列的名称取到特征数据,所以主函数中划分X,y时不加.values,这也不加因为这里是numpy。然后训练集特征与测试集特征处理函数是不同的

# 2. 对数值型特征值做归一化处理
scaler = MinMaxScaler()
scaled_tr_feat = scaler.fit_transform(X_train[NUM_FEAT_COLS])
scaled_te_feat = scaler.transform(X_test[NUM_FEAT_COLS])

# 3. 特征合并
X_train_proc = np.hstack((encoded_tr_feat, scaled_tr_feat))
X_test_proc = np.hstack((encoded_te_feat, scaled_te_feat))

return X_train_proc, X_test_proc

おすすめ

転載: www.cnblogs.com/jacker2019/p/11235631.html