天天看點

資料分析入門之KNN影片類型和癌症預測1、預測電影類型2、預測是否患癌症

文章目錄

  • 1、預測電影類型
    • 1.1、導入相關庫
    • 1.2、導入資料
    • 1.3、切分出 x 和 y
    • 1.4、聲明算法
    • 1.5、進行訓練
    • 1.6、生成資料(導入預測值)
    • 1.7、使用算法進行預測
  • 2、預測是否患癌症
    • 2.1、擷取資料
      • 2.1.1、導入資料
      • 2.1.2、切分出 x資料 和 y目标值
      • 2.1.3、分出訓練集和測試集
    • 2.3、聲明算法并學習
    • 2.4、結果預測
    • 2.5、機率預測
    • 2.6、預測值與真實值對比
    • 2.7、計算預測的準确率
      • 方法一:均值法
      • 方法二:knn.score()

操作環境: window10,Python3.7,Jupyter notebook

資料資料: https://www.lanzous.com/i96s2id

1、預測電影類型

  • 一部電影的類型可以通過它的 武打鏡頭 和 接吻鏡頭 的多少了确定影片是

    動作片

    還是

    愛情片

電影名稱 武打鏡頭 接吻鏡頭 分類情況
大話西遊 36 1 動作片
殺破狼 43 2 動作片
前任3 10 愛情片
戰狼2 59 1 動作片
泰坦尼克号 1 15 愛情片
星語心願 2 19 愛情片

1.1、導入相關庫

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from sklearn.neighbors import KNeighborsClassifier
           

1.2、導入資料

  • 準備資料,Dataframe類型的資料,numpy類型的資料
  • 資料 x 必須是二維的[[樣本一], [樣本二], [樣本三]]
  • 目标值 y 沒有定義要求
data = pd.read_excel('movies.xlsx', sheet_name=1)
data
           
資料分析入門之KNN影片類型和癌症預測1、預測電影類型2、預測是否患癌症

1.3、切分出 x 和 y

x = data[['武打鏡頭', '接吻鏡頭']]
y = data['分類情況']
           
資料分析入門之KNN影片類型和癌症預測1、預測電影類型2、預測是否患癌症

1.4、聲明算法

1.5、進行訓練

KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                     metric_params=None, n_jobs=None, n_neighbors=5, p=2,
                     weights='uniform')
           

1.6、生成資料(導入預測值)

1、碟中諜6——>動作片
2、李茶的姑媽——>愛情片
           

1.7、使用算法進行預測

2、預測是否患癌症

  • 細胞核的特征:
  1. 第一個特征是ID;第二個特征是這個案例的癌症診斷結果,編碼“M”表示惡性,“B”表示良性。
  2. 其他30個特征是數值的其他名額,包括細胞核的半徑(Radius)、質地(Texture)、周長(Perimeter)、面積(Area)和光滑度(Smoothness)等的均值、标準差和最大值。

2.1、擷取資料

  • x資料,樣本(人)特征,細胞核的質地、光滑度等
  • y目标值,樣本(人)診斷結果、兩種:M惡性,B良性

2.1.1、導入資料

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from sklearn.neighbors import KNeighborsClassifier
# 導入資料
# 二分類問題,良性和惡行
data = pd.read_csv('cancer.csv', sep='\t')
data
           
ID Diagnosis radius_mean texture_mean perimeter_mean area_mean smoothness_mean compactness_mean concavity_mean concave_mean ... radius_max texture_max perimeter_max area_max smoothness_max compactness_max concavity_max concave_max symmetry_max fractal_max
842302 M 17.99 10.38 122.80 1001.0 0.11840 0.27760 0.30010 0.14710 ... 25.380 17.33 184.60 2019.0 0.16220 0.66560 0.7119 0.2654 0.4601 0.11890
1 842517 M 20.57 17.77 132.90 1326.0 0.08474 0.07864 0.08690 0.07017 ... 24.990 23.41 158.80 1956.0 0.12380 0.18660 0.2416 0.1860 0.2750 0.08902
2 84300903 M 19.69 21.25 130.00 1203.0 0.10960 0.15990 0.19740 0.12790 ... 23.570 25.53 152.50 1709.0 0.14440 0.42450 0.4504 0.2430 0.3613 0.08758
3 84348301 M 11.42 20.38 77.58 386.1 0.14250 0.28390 0.24140 0.10520 ... 14.910 26.50 98.87 567.7 0.20980 0.86630 0.6869 0.2575 0.6638 0.17300
4 84358402 M 20.29 14.34 135.10 1297.0 0.10030 0.13280 0.19800 0.10430 ... 22.540 16.67 152.20 1575.0 0.13740 0.20500 0.4000 0.1625 0.2364 0.07678
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
564 926424 M 21.56 22.39 142.00 1479.0 0.11100 0.11590 0.24390 0.13890 ... 25.450 26.40 166.10 2027.0 0.14100 0.21130 0.4107 0.2216 0.2060 0.07115
565 926682 M 20.13 28.25 131.20 1261.0 0.09780 0.10340 0.14400 0.09791 ... 23.690 38.25 155.00 1731.0 0.11660 0.19220 0.3215 0.1628 0.2572 0.06637
566 926954 M 16.60 28.08 108.30 858.1 0.08455 0.10230 0.09251 0.05302 ... 18.980 34.12 126.70 1124.0 0.11390 0.30940 0.3403 0.1418 0.2218 0.07820
567 927241 M 20.60 29.33 140.10 1265.0 0.11780 0.27700 0.35140 0.15200 ... 25.740 39.42 184.60 1821.0 0.16500 0.86810 0.9387 0.2650 0.4087 0.12400
568 92751 B 7.76 24.54 47.92 181.0 0.05263 0.04362 0.00000 0.00000 ... 9.456 30.37 59.16 268.6 0.08996 0.06444 0.0000 0.0000 0.2871 0.07039

2.1.2、切分出 x資料 和 y目标值

  • 将資料一分為二,劃分後資料是一 一對應的
# 診斷結果、目标值
y = data['Diagnosis']

# 訓練資料,特征,細胞核一系列特征,光滑度,質地等
x = data.iloc[:,2:] #第二列後面的所有資料
           

2.1.3、分出訓練集和測試集

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2) #使用20%的資料來測試資料
           
資料分析入門之KNN影片類型和癌症預測1、預測電影類型2、預測是否患癌症

2.3、聲明算法并學習

knn = KNeighborsClassifier()
# 算法學習455個樣本
knn.fit(x_train, y_train)
           
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                     metric_params=None, n_jobs=None, n_neighbors=5, p=2,
                     weights='uniform')
           

2.4、結果預測

# 使用算法進行預測
y_pre = knn.predict(x_test)
y_pre
           
array(['B', 'B', 'B', 'B', 'B', 'M', 'M', 'B', 'B', 'M', 'B', 'B', 'M',
       'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'B', 'M', 'M', 'B', 'B',
       'B', 'B', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'M',
       'B', 'M', 'M', 'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'M', 'B',
       'B', 'B', 'B', 'B', 'M', 'B', 'M', 'B', 'B', 'B', 'M', 'B', 'M',
       'B', 'M', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'B', 'B', 'B', 'B',
       'M', 'B', 'M', 'B', 'M', 'B', 'M', 'B', 'B', 'B', 'B', 'B', 'M',
       'M', 'M', 'B', 'M', 'M', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'M',
       'B', 'B', 'B', 'M', 'B', 'B', 'M', 'B', 'B', 'M'], dtype=object)
           

2.5、機率預測

array([[1. , 0. ],
       [0.8, 0.2],
       [1. , 0. ],
       [1. , 0. ],
       [1. , 0. ],
		......
       [1. , 0. ],
       [0. , 1. ],
       [1. , 0. ],
       [0.6, 0.4],
       [0. , 1. ]])
           

2.6、預測值與真實值對比

# 真實情況進行比對,驗證算法好不好
display(y_pre)

# 剛才保留,真實的資料
display(y_test.values)
           
array(['B', 'B', 'B', 'B', 'B', 'M', 'M', 'B', 'B', 'M', 'B', 'B', 'M',
       'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'B', 'M', 'M', 'B', 'B',
       'B', 'B', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'M',
       'B', 'M', 'M', 'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'M', 'B',
       'B', 'B', 'B', 'B', 'M', 'B', 'M', 'B', 'B', 'B', 'M', 'B', 'M',
       'B', 'M', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'B', 'B', 'B', 'B',
       'M', 'B', 'M', 'B', 'M', 'B', 'M', 'B', 'B', 'B', 'B', 'B', 'M',
       'M', 'M', 'B', 'M', 'M', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'M',
       'B', 'B', 'B', 'M', 'B', 'B', 'M', 'B', 'B', 'M'], dtype=object)
       
array(['B', 'B', 'B', 'B', 'B', 'M', 'M', 'M', 'B', 'M', 'B', 'B', 'B',
       'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'B', 'M', 'M', 'B', 'B',
       'B', 'B', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'B', 'M', 'M', 'M',
       'B', 'M', 'M', 'M', 'B', 'B', 'B', 'B', 'M', 'M', 'M', 'M', 'B',
       'B', 'B', 'B', 'B', 'M', 'B', 'M', 'B', 'B', 'B', 'M', 'B', 'M',
       'B', 'M', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'B', 'B', 'B', 'B',
       'M', 'B', 'M', 'B', 'M', 'B', 'M', 'B', 'B', 'B', 'B', 'B', 'M',
       'B', 'M', 'B', 'M', 'M', 'B', 'B', 'B', 'B', 'B', 'M', 'B', 'M',
       'M', 'B', 'B', 'M', 'B', 'B', 'M', 'B', 'M', 'M'], dtype=object)
           

2.7、計算預測的準确率

方法一:均值法

  • 用預測值和真實值對比,傳回結果為 True 和 False ,對其求均值得到準确率

方法二:knn.score()

繼續閱讀