day10 KNN線形回帰手書き数字認識クラス予測

day10データ解析

線形回帰の例

都市気候と海の関係

import numpy as np
import pandas as pd
from pandas import DataFrame,Series
import matplotlib.pyplot as plt 
%matplotlib inline  

各データ沿岸都市のためのデータのインポート

ferrara1 = pd.read_csv('./ferrara_150715.csv')
ferrara2 = pd.read_csv('./ferrara_250715.csv')
ferrara3 = pd.read_csv('./ferrara_270615.csv')
ferrara = pd.concat([ferrara1,ferrara2,ferrara3],ignore_index=True)
ferrara         # 级联 因为属性相同

torino1 = pd.read_csv('./torino_150715.csv')
torino2 = pd.read_csv('./torino_250715.csv')
torino3 = pd.read_csv('./torino_270615.csv')
torino = pd.concat([torino1,torino2,torino3],ignore_index=True) 
.....

データ:1565768816308

faenza.dtypes(以上、カスケードした後に除去する必要があります)

Unnamed: 0       int64
temp           float64
humidity         int64
pressure         int64
description     object
dt               int64
wind_speed     float64

削除されたリストに追加しました

市内= [フェラーラ、トリノ、マントヴァ、ミラノ、ラヴェンナ、アスティ、ボローニャ、ピアチェンツァ、チェゼーナ、陶器]

市内における都市:
city.drop( '名前:0'、軸= 1、インプレース=真)

1

最高温度は、近くと遠く海からの関係で表示されます

(複数の都市を観測)

#获取所有城市中的最高温度数据值
max_temp = []
for city in citys:
    max_temp.append(city['temp'].max())

max_temp

[33.43000000000001,
 34.69,
 34.18000000000001,
 34.81,....

海から街からのすべてのデータ値を取得します。

city_dist = []
市内で都市:
city_dist.append(都市[ 'distの'] MAX()。)

[47, 357, 121, 250, 8, 315, 71, 200, 14, 37]

可変距離、温度従属変数以来

plt.scatter(city_dist、max_temp)#描画

1565768952007

2

観察された、遠い海からも直線を形成することができ、海からの直線の近傍に形成されてもよいです。

- 分别以100公里和50公里为分界点,划分为离海近和离海远的两组数据(近海:小于100  远海:大于50)

GROUPBYのグループ化を使用すると、分析のグループ化した後、決意条件(式)を使用する必要があり、使用することはできません

s_city_dist =シリーズ(データ= city_dist) #の全ての都市の距離
s_city_dist

沿岸都市の条件を決定します

near_condition = s_city_dist <100
near_condition

near_dist = s_city_dist [near_condition】
プリント(near_dist)

最高の沿岸都市の温度を達成

s_max_temp =シリーズ(データ= max_temp) #すべての最高温度
near_temp = s_max_temp [near_condition]
near_temp

オフショア距離と温度との関係を描きます

plt.scatter(near_dist、near_temp、C = R '')

plt.scatter(near_dist、near_temp)

1565769065588

それは海から遠く離れています

遠い海から街の温度と距離のデータ取得価額

海の条件の決意から遠い都市の開発

far_condition = s_city_dist> 50
far_dist = s_city_dist [far_condition]

海から遠く離れた都市の最高温度を取得します

far_temp = s_max_temp [far_condition]
far_temp

表示されたスキャッタグラムの間の関係を描く沖合いの海の温度や飛散遠い距離

plt.scatter(near_dist、near_temp、C = R '')
plt.scatter(far_dist、far_temp、C = 'Y'、S = 100)#颜色大小

1565769106341

1565769112785

遠い海から都市の気温と散布距離関係の線形回帰
# 导包
from sklearn.linear_model import LinearRegression
# 1 . 创建一个算法模型对象
linear_far = LinearRegression()
linear_near = LinearRegression()
# 2 .将散点(样本)数据代入到算法模型中, 让算法模型去根据数据的特性进行线性回归(计算)
# fit 函数的参数 : X,y
# X : 样本数据中的特征数据(features)  二维
# y : 样本数据中的目标数据(target)

# 针对当前项目来讲: 散点图中的一个点标识的数据即为一个样本数据
# 样本集: 多个样本数据组成一个样本集

# 特征数据的改变会影响目标数据的改变,距离就是特征数据,温度就是目标数据

# 注意: 特征数据必须是一个二维数据
linear_far.fit(far_dist.reshape(-1,1),far_temp)

--->線形回帰(copy_X =真、fit_intercept =真、n_jobs = 1、= Falseの正規化)

見通し

linear_far.predict(200)

array([34.24476188])
回帰曲線ドロー

(ドットラインを形成するのに十分)

300回の散乱を生成します

軸は、スキャッタグラム300に設定された座標

XMIN = far_dist.min() - 20
XMAX = far_dist.max()+ 20
X = np.linspace(XMIN、XMAX、300)

パラメータは、ポイントに最も近い、予測値に対応するサンプルのセットの特徴データ(二次元)#xを予測する必要があります

Y = linear_far.predict(x.reshape(-1,1))

plt.scatter(X、Y、S = 10)
plt.scatter(far_dist、far_temp、C = R ''、Sは= 30)

1565769232430

沿岸都市の温度と距離の関係の線形回帰

plt.scatter(near_dist、near_temp、C = 'Y'、S 80 =)を

linear_near.fit(near_dist.reshape(-1,1)、near_temp)
_xmin = near_dist.min() - 20
_xmax = near_dist.max()+ 20
_x = np.linspace(_xmin、_xmax、300)
_y = linear_near。 (_x.reshape(-1,1))を予測
plt.scatter(_x、_y、S = 10)
plt.scatterを(near_dist、near_temp、C = 'Y'、S 80 =)を

1565769309566

plt.xlabel( 'DIST')
plt.ylabel( 'TEMP')
plt.title( 'TEMP&表題')
plt.scatter(_x、_y、S = 10)
plt.scatter(near_dist、near_temp、C = 'Y'、 S = 80)
plt.scatter(X、Y、S = 10)
plt.scatter(far_dist、far_temp、C = R ''、S = 30)

1565769324922 機械学習

- 机器学习和AI(人工智能)之间的关联是什么?
    - 机器学习是实现人工智能的一种技术手段
- 算法模型:
    - 特殊的对象。对象内部封装了一个还没有求出解的方程(算法)。
    - 作用:
        - 预测:预测出一个未知的值
        - 分类:将一个未知的事物归到已知的分类中
        - 预测或者分类的结果就是模型对象方程的解
- 样本数据:
    - 组成部分:
        - 特征数据:自变量
        - 目标数据:因变量
    - 样本数据和算法模型对象之间的关联?
        - 可以将样本数据带入到算法模型中,对其内部的方程进行求解操作。一旦模型对象有解了,那么就可以实现分类或者预测的功能。
    - 训练模型:将样本数据带入到算法模型,让其模型对象有解。
    
- 算法模型的分类:
    - 有监督学习:如果算法模型需要的样本数据必须要包含特征数据和目标数据
    - 无监督学习:如果算法模型需要的样本数据只包含特征数据即可
- sklearn模块展开学习
    - 封装好了多种不同的算法模型
    
面积  楼层  采光率  售价
100   3    34%    80w
80   6    89%    100w
インポートsklearn、線形回帰アルゴリズムモデルオブジェクト

サンプルを取ります

機能データの特徴= city_dist#リスト
ターゲット= city_max_tempの#オブジェクトデータのリスト

形で特性データ#NP機能= np.array(機能)
目標= np.array(ターゲット)#NPフォーム対象データ

feature.shape

(10,)
from sklearn.linear_model import LinearRegression
#实例化算法模型对象
linner = LinearRegression() # y = wx + b
#训练模型
#X:二维的特征数据
#y:目标数据
linner.fit(feature.reshape((-1,1)),target)
#预测
linner.predict([[175],[201]])

---->アレイ([33.87226813、34.01981272])

样本集:用于对机器学习算法模型对象进行训练。样本集通常为一个DataFrame。
    - 特征数据:特征数据的变化会影响目标数据的变化。通常为多列。
    - 目标数据:结果。通常为一列。

ディスプレイ上の街にオープン海にデータ散布図と線形回帰

X = np.linspace(0360、NUM = 100)
、Y = linner.predict(x.reshape(-1,1))

plt.scatter(city_dist、city_max_temp)
plt.scatter(X、Y)
plt.xlabel( '距離')
plt.ylabel( "上限温度")
plt.title( '距離と最高温度との関係')

1565769596462

サポート技術情報の要約:

plt.scatter(city_dist, max_temp)  # 绘图

from sklearn.linear_model import LinearRegression
创建一个算法模型对象
linear_far = LinearRegression()

注意: 特征数据必须是一个二维数据
linear_far.fit(far_dist.reshape(-1,1),far_temp)
linear_far.predict(200)

K-最近傍(KNN)

映画を分類する方法

我々はすべて知っているように、?映画は、テーマに応じて分類することができますが、テーマ自体が定義する方法であるに属し、その映画を決定誰
テーマは?それは映画の共通のテーマは、同じ特性を持っているでしょうか?これらは、フィルムの分類を行うために必要なです尋ねる考える
質問を。誰も彼らは映画フィルムと以前に似た映画を作ることを言わないだろうが、我々は、スタイルの各フィルムということを知っています
が上は類似しており、フィルムの同じテーマである可能性が高いです。だから、アクション映画の間に非常によく似ているアクション映画の共通の特徴を持っているもの
のロマンスと明確な違いがあるのでしょうか?アクション映画は、私たちは、映画の戦いのシーンが大好きになる、レンズがキスします
単に戦闘や映画の種類を決定するためにキスの存在に依存することはできません。しかし、愛のキスはより多くの映画、アクション映画の撮影した
分類のために使用することができる映画の中の映画に出演し、そのようなシーンの数に基づいて、より頻繁に戦いのシーンを。

それは非常に効果的とマスターに簡単で、K-最近傍:最初の章では、機械学習アルゴリズムを説明します。

1、K-最近傍アルゴリズム論

簡潔には、K-最近傍アルゴリズムは、分類内の異なる値との間の距離の測定方法を使用します。

  • 利点:高い精度(算出距離)、外れ値に対して敏感ではない(距離に基づく単純な分類、特別な場合は無視される)、データ入力(予め決められていないデータ)を想定していません。
  • 短所:高い時間複雑さ、スペースの複雑性が高いです。
  • 該当するデータ範囲:数値と名目タイプ。

ワークス

また、トレーニングセットとタグが存在する各データサンプルセットと呼ばれるサンプルデータセットは、つまり、私たちはデータサンプルのそれぞれが設定されていることを知っている、ある
カテゴリとの対応関係を。入力データは新しいタグでない後、それぞれの新しいデータサンプルの特性に対応したフォーカスデータ
の特性を比較し、次いで、特徴抽出アルゴリズムは、最も類似した(最近傍)クラスラベルサンプルデータを焦点を当てました。一般的に、我々は
K最も類似したデータの前にセットのみのサンプルデータを選択し、これはK-最近傍アルゴリズムKの産地で、通常はKは20以下の整数です。
最後に、分類Kの最大数を選択することは、新たなデータ分類と最も類似したデータを表示されます

バックフィルムの分類例の前に、K-最近傍分類ロマンスとアクション映画を使用して。一部の人々は、統計的な映画の戦いのシーンとキスシーンの多くは、次の図は、戦いの数及び6枚のフィルムにキスを示しています。あなたは映画を見ていない場合は、どのようにそれはロマンスやアクション映画それであるかを決定するには?私たちは、この問題を解決するためにK-最近傍アルゴリズムを使用することができます。

1565773360592

まず、私たちは、この未知の映画のキスシーンがあるどのように多くの戦いのシーンと知るために必要なすべての、この場所は疑問符上の未知の図は、ムービーが多数のグラフィカルな表現を撃っ出現で、具体的な数値は以下の表を参照してください。

1565773370861

映画は不明どのような種類を知っていない場合でも、我々はまた、いくつかの方法で算出することができます。図に示すように、第1、試料フィルムと他のフィルムからの未知の濃度を計算します。1565773384459

今、私たちは距離に応じて昇順ですべての映画や映画から、未知のサンプルセットを、持っている、あなたはK最寄りの映画を見つけることができます。カリフォルニアの男に続いて3本の最も近い映画は、彼がボーイズ、美しい女性に本当にありませんが、K = 3と仮定する。3枚のフィルムの種類に応じて、K-最近傍アルゴリズムは、フィルムの未知のタイプに決定し、この映画はすべての3つの愛の物語は、私たちは未知のは、恋愛映画であると判断されます。

ユークリッド距離(ユークリッド距離)

ユークリッド距離は、最も一般的な距離メトリックである多次元空間内の各点間の絶対距離を測定します。次のように式は次のとおりです。

これは、多次元を扱うことができます1565773423353

2、scikit学習ライブラリ内の最近傍をK-使用

  • 分類:sklearn.neighborsからKNeighborsClassifierをインポート

0)最も単純な例の一つ

1.フィルムの分類

PDのように輸入パンダ
NPとしてインポートnumpyの

データ= pd.read_excel( './ my_films.xlsx')
データ

1565773490231

#样本数据的提取
feature = data[['Action lens','Love lens']]
target = data['target']

print(feature, target)

sklearn.neighborsからインポートKNeighborsClassifier
KNN = KNeighborsClassifier(N_NEIGHBORS = 3)
knn.fit(機能、ターゲット)
knn.predict([19,19])

---->アレイ([ 'ラブ']、DTYPE =オブジェクト)

kの値を決定するための簡単な方法

knn.score(機能、ターゲット)

-----> 0.9166666666666666

2、もし予想年間売上高を超える$ 50K

df = pd.read_csv('./adults.txt')
df.head()
df

1565773622945

1565773635985

多くの変数

しかし、賃金関連の特性と目的は、年齢占有education_numのhours_per_week()に関連するかもしれません

年齢、教育、ジョブは、対応の結果として機械学習データとして週労働時間を支払わ取得します

サンプルデータの抽出
feature = df[['age','education_num','occupation','hours_per_week']]
target = df['salary']
Stringデータ型を変換するデータ変換は、intです
s = feature['occupation'].unique()  # 去重,否则数字太多,权重太高
s = feature['occupation']
dic = {}
j = 0 
for i in s :
    dic[i] = j
    j += 1
feature['occupation'] = feature['occupation'].map(dic)  feature.head()
  • KNNは数字を必要とし、距離を算出し、1565773772692

  • 重くない、デジタルカバー、体重を引き起こしては高すぎます1565773783472

  • デエンファシス、重みと2桁の数字の後にすることができます1565773791445

知識マップ方式、データ変換

# 样本数据的拆分  32560  # 为了是正确的数据测试   训练数据 测试数据60
x_train = feature[:32500]
y_train = target[:32500]
x_test = feature[32500:]
y_test = target[32500:]
knn = KNeighborsClassifier(n_neighbors=30)
knn.fit(x_train,y_train)
knn.score(x_test,y_test)

---> 0.7868852459016393

テストのためのテストデータ
print(np.array(y_test))
print(knn.predict(x_test))
def funcc(a,b):
    if a == b: 
        return True
    else:
        return False
c = []    
for index,i in enumerate(np.array(y_test)):
    print(funcc(i,knn.predict(x_test)[index]))
    c.append(funcc(i,knn.predict(x_test)[index]))
j = 0     
for i in c:
    if i:
        j+=1
        
print(j) 
print(j/len(c))# 0.7868852459016393

knn.predict([50,26,0,50]])--->アレイ([ '<= 50K']、DTYPE =オブジェクト)

knn.predict([30,13,1,40]])--->アレイ([ '<= 50K']、DTYPE =オブジェクト)

結果は右のようです!

サポート技術情報の要約:

1
data = pd.read_excel('./my_films.xlsx')
#样本数据的提取
feature = data[['Action lens','Love lens']]
target = data['target']
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(feature,target)
knn.predict([[19,19]])

---->array(['Love'], dtype=object)
一种简单的方法确定k的值

knn.score(feature,target)
----->0.9166666666666666

2
String类型数据转换为int
别的操作类似1 

デジタル認識

ガイドパッケージ

NPのようnumpyのインポート
のPLTとしてインポートmatplotlib.pyplot
%のmatplotlibのインライン
sklearn.neighborsからインポートKNeighborsClassifier

精製サンプルデータ

img = plt.imread('./data/3/3_1.bmp')
img
plt.imshow(img)
img.shape # (28, 28) 为什么是二维的呢? 是矢量图?

1565776104587

データソース:

1565776138700

1565776163518

0-9、手書き0_500の様々なから〜0_1、精度を高め

トレーニングはまた、プレートの番号、26英語の手紙のライセンスを取得することができます

精製サンプルデータ

これらのデータへのアクセスは、リストに追加し、次いでNP、NP良好な操作に加え、並びに多次元

feature = []
target = []
for i in range(0,10):
    for j in range(1,501):
        # ./data/3/3_1.bmp
        img_path = f'./data/{i}/{i}_{j}.bmp'
        img_arr = plt.imread(img_path)
        feature.append(img_arr)
        target.append(i) # 目标特征对应  1-9 数字
特徴データと対象データ
feature.shape  

feature = np.array(feature)
feature.shape
target = np.array(target)
target.shape

試料は、前部を破壊またはバックされる1は、すべての9すぎる規則的である
だけでなく、特性データとで処理した同じ種に対応するデータオブジェクト

np.random.seed(3)
np.random.shuffle(feature)
np.random.seed(3)
np.random.shuffle(target)
feature.shape
変形

唯一の2次元の特徴データをサポートしているため、データは2次元のための呼び出しに沿ったものでなければなりません

# ValueError: Found array with dim 3. Estimator expected <= 2.
feature = feature.reshape(5000,784) # 28*28
feature.shape

---->(5000、28、28)

トレーニングデータとテストデータの取得
x_train = feature[:4950]
y_train = target[:4950]
x_test = feature[4950:]
y_test = target[4950:]
モデルオブジェクトの例としては、研修
knn = KNeighborsClassifier(n_neighbors=15)
knn.fit(x_train,y_train)
knn.score(x_test,y_test)

----> 0.92

モデル訓練良いを保存

次回は使用する準備ができてトレーニングを、気にしないだろう

from sklearn.externals import joblib
joblib.dump(knn,'./digist_knn.m')

----> [ './ digist_knn.m']

グッドコールトレーニングモデル
knn = joblib.load('./digist_knn.m')
knn

---->

KNeighborsClassifier(アルゴリズム= '自動車'、leaf_size = 30、メトリック= 'ミンコフスキー'、
metric_params =なし、n_jobs = 1、N_NEIGHBORS = 15、P = 2、
重み= '均一')

モデルの精度をテストするためのテストデータを使用します

print('已知分类', y_test)
print('模型分类结果',knn.predict(x_test))

---->

既知の分類[5 9 1,778,273,042,253,709,759。9 9 3 0 2 0 6 7 6 4 2 2 0 1 5 7
8 9 1 3 1 0 0 2 3 9238]
モデル分類結果[5 9 1 7 7 8 2 7 3 0 1 2 2 5,370,175,909,932,426,106 2 0 5 1 9
。8 1 0 0 913239238]

モデル同定に外部の画像
img_arr = plt.imread('./数字.jpg')
plt.imshow(img_arr)

1565776547440

インターセプト試験サンプル

four = img_arr[100:160,0:60]
plt.imshow(four)

1565776584912

four.shape

---->(60、60、3)

平均ベースの次元削減の例

exam = [[22,22],[333,333]]
exam = np.array(exam)
exam.shape
exam = exam.mean(axis=1) # 求平均值成1列了 
exam.shape
exam

---->アレイ([22、333])

1次元縮小の操作
four = four.mean(axis=2)
four.shape

---->(60、60)

2つの画素、等の圧縮比
import scipy.ndimage as ndimage
four = ndimage.zoom(four,zoom=(28/60,28/60))
four.shape

--->(28、28)

plt.imshow(four)

1565776696262

それはライン784であるため、

図3は、テストデータを変形します
four = four.reshape((1,784))
four.shape

---->(1、784)

結果は:

knn.predict(four)

--->アレイ([4])

サポート技術情報の要約:

= plt.imread IMG( './データ/ 3 / 3_1.bmp')
plt.imshow(IMG)
特集= np.array(特徴)#機能のリストがされた
モデルを保存
sklearn.externalsインポートJOBLIBから
joblib.dump(KNN、 './digist_knn.m ')
コールモデル
KNN = joblib.load(' ./ digist_knn.m' )
採取グラフィック
4 = img_arr [100:160,0: 60]
平均寸法減少と
4 =のfour.mean(軸= 2)
の圧縮比のような
インポートAS ndimage scipy.ndimage
フォー= ndimage.zoom(四、ズーム=(28 / 60,28 / 60))

おすすめ

転載: www.cnblogs.com/Doner/p/11353777.html