日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从零开始数据科学与机器学习算法-数据预处理与基准模型-01

發(fā)布時間:2024/9/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零开始数据科学与机器学习算法-数据预处理与基准模型-01 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

讀取數據函數

from csv import reader # 導入庫 def read_csv(the_name_of_file_to_be_read): # 定義數據讀取函數file = open(the_name_of_file_to_be_read,"r")#要讀取的文件的名稱every_line_of_the_data = reader(file) # 讀取每一行數據the_dataseet = list(every_line_of_the_data) # 把每一行數據放到該列表中return the_dataseet # 返回處理后的數據 the_name_of_file_to_be_read = "diabetes-NAN.csv" # 數據文件 dataset = read_csv(the_name_of_file_to_be_read) # 讀取數據 print(dataset) # 打印數據

數據缺失先判斷在放入

from csv import reader# 導入庫 def read_csv(the_name_of_file_to_be_read): # 定義數據讀取函數dataset = list()# 定義一個空列表with open(the_name_of_file_to_be_read,"r") as file: # 文件讀取csv_reader = reader(file) # 讀取for row in csv_reader: # 循環(huán)文件內容逐行判斷if not row: # 如果不存在就跳過continue # continue的作用:用來結束本次循環(huán),緊接著執(zhí)行下一次的循環(huán)dataset.append(row) # 把讀取的內容追加到上面定義的空列表中return dataset # 返回列表 the_name_of_file_to_be_read = "diabetes-NAN.csv" # 數據文件 dataset = read_csv(the_name_of_file_to_be_read) # 讀取數據 print(dataset) # 打印數據

數據類型強調與轉換

# 列子 dataset = [[1,2],[3,4]]for i in dataset:# 循環(huán)列表print(i) # [1, 2] # [3, 4] for i in dataset[0]: # 循環(huán)列表中第一行print(i) # 1 # 2 for i in range(len(dataset[0])): # 循環(huán)列表中第一行的長度print(i) # 0 # 1 dataset = [[1,2],[3,4],[5,6],[7,8]] for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)print(col_values) #[1, 3, 5, 7] #[2, 4, 6, 8] from csv import reader# 導入庫 def read_csv(the_name_of_file_to_be_read): # 定義數據讀取函數dataset = list()# 定義一個空列表with open(the_name_of_file_to_be_read,"r") as file: # 文件讀取csv_reader = reader(file) # 讀取for row in csv_reader: # 循環(huán)文件內容逐行判斷if not row: # 如果不存在就跳過continue # continue的作用:用來結束本次循環(huán),緊接著執(zhí)行下一次的循環(huán)dataset.append(row) # 把讀取的內容追加到上面定義的空列表中return dataset # 返回列表 def conver_string_to_float(dataset,column): # 字符串轉數字函數dataset = dataset[1:] # 列表切分 保留列表索引1至最后一行for row in dataset: # 循環(huán)數據集row[column]=float(row[column].strip()) # 對每一行中每一列進行變化為浮點類型,去掉空格 the_name_of_file_to_be_read = "diabetes-NAN.csv" # 數據文件 dataset = read_csv(the_name_of_file_to_be_read) # 讀取數據 for i in range(len(dataset[0])):# 取出一行的長度進行循環(huán)conver_string_to_float(dataset,i)# 調用字符串轉數字函數 print(dataset)# 打印

特征縮放


最大最小歸一化,平均歸一化有一個缺陷就是當有新數據加入時,可能導致max和min的變化,需要重新定義。

通過函數找出每列中最大最小值列子

dataset = [[1,2,3],[4,5,6]]

# 編寫函數:在數據集中找到最大值和最小值 def find_the_max_and_min_in_the_dataset(dataset): max_and_min=list() # 定義一個空列表for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)value_max = max(col_values)# 取出每列中最大值value_min = min(col_values) #最小值max_and_min.append([value_max,value_min]) # 追加return max_and_min max_and_min = find_the_max_and_min_in_the_dataset(dataset) # 調用函數帶入數據 print(max_and_min) # 打印每一列中最大值和最小值

最大最小值歸一化

Min-Max Normalization
?公式:? x’ = (x - X_min) / (X_max - X_min)
列子

dataset = [[1,2],[3,4],[5,6],[7,8]] (1-1)/(7-1),(2-2)/(8-2),(3-1)/(7-1),(4-2)/(8-2),(5-1)/(7-1),(6-2)/(8-2),(7-1)/(7-1),(8-2)/(8-2)


代碼

dataset = [[1,2],[3,4],[5,6],[7,8]] # 編寫函數:在數據集中找到最大值和最小值 def find_the_max_and_min_in_the_dataset(dataset): max_and_min=list() # 定義一個空列表for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)value_max = max(col_values)# 取出每列中最大值value_min = min(col_values) #最小值max_and_min.append([value_max,value_min]) # 追加return max_and_min max_and_min = find_the_max_and_min_in_the_dataset(dataset) # 調用函數帶入數據 print(max_and_min) # 打印每一列中最大值和最小值 # 最大最小歸一化 def max_min_normalization(dataset,max_and_min):for row in dataset:# 循環(huán)列表每行for i in range(len(row)): # 通過循環(huán)得到每行有多少個數據# 把列表中每個值代入到公式(x - X_min) / (X_max - X_min)row[i] = (row[i]-max_and_min[i][1])/(max_and_min[i][0]-max_and_min[i][1]) max_min_normalization(dataset,max_and_min)# 調用函數 print(dataset)

平均歸一化

公式:? x’ = (x - μ) / (MaxValue - MinValue)
列子

dataset = [[1,2],[3,4],[5,6],[7,8]] (1+3+5+7)/4,(2+4+6+8)/4

(1-4)/(7-1),(2-5)/(8-2),(3-4)/(7-1),(4-5)/(8-2),(5-4)/(7-1),(6-5)/(8-2),(7-4)/(7-1),(8-5)/(8-2)


代碼

dataset = [[1,2],[3,4],[5,6],[7,8]]

# 編寫函數:在數據集中找到最大值和最小值 def find_the_max_and_min_in_the_dataset(dataset): max_and_min=list() # 定義一個空列表for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)value_max = max(col_values)# 取出每列最大值value_min = min(col_values) #最小值max_and_min.append([value_max,value_min]) # 追加return max_and_min max_and_min = find_the_max_and_min_in_the_dataset(dataset) # 調用函數帶入數據 print(max_and_min) # 打印每一列中最大值和最小值

# 編寫函數求出每列的平均值 def average_a(dataset):average=list()for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)average_ = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)average.append(sum(average_)/len(dataset)) # 求每列數據的總和并除以個數求平均數return average average = average_a(dataset) # 調用函數帶入數據 print(average) # 打印每一列中的平均數

# 平均歸一化 def mean_normalization(dataset,max_and_min):for row in dataset:# 循環(huán)列表每行for i in range(len(row)): # 通過循環(huán)得到每行有多少個數據row[i] = (row[i]-average[i])/(max_and_min[i][0]-max_and_min[i][1]) mean_normalization(dataset,max_and_min)# 調用函數 print(dataset)

標準化

列子:

dataset = [[1,2,3],[3,4,5],[5,6,7],[7,8,9],[81,96,100]] # 每列平均值 for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] print(sum(col_values)/len(dataset))

a = sqrt((((1-19.4)**2)+((3-19.4)**2)+((5-19.4)**2)+((7-19.4)**2)+((81-19.4)**2))/4) a

(1-19.4)/a

(3-19.4)/a


代碼:

dataset = [[1,2,3],[3,4,5],[5,6,7],[7,8,9],[81,96,100]] # 計算數據集的平均值 函數 def calculate_the_mean_of_the_dataset(dataset):means = list()for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)mean = sum(col_values)/float(len(dataset)) #每一列數據和除以數據個數得出平均值means.append(mean)return means a = calculate_the_mean_of_the_dataset(dataset) print(a)

# 計算數據集的平均值 函數 def calculate_the_mean_of_the_dataset_V2(dataset):means = ["占位符" for i in range(len(dataset[0]))] for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)means[i] = sum(col_values)/float(len(dataset)) #每一列數據和除以數據個數得出平均值return means from math import sqrt # 計算數據集的標準偏差 def calculate_the_stdevs_of_the_dataset(dataset,means):stdevs = ["占位符" for i in range(len(dataset[0]))]for i in range(len(dataset[0])):# 對列表進行迭代variance = [pow(row[i]-means[i],2) for row in dataset]stdevs[i] = sum(variance)stdevs=[sqrt(element/float(len(dataset)-1)) for element in stdevs] # 偏估計要除以n-1return stdevs means_list = calculate_the_mean_of_the_dataset_V2(dataset) means_list

stdevs_list = calculate_the_stdevs_of_the_dataset(dataset,means_list) stdevs_list

# 數據集的標準化 def the_standardization_of_our_dataset(dataset,means_list,stdevs_list):for row in dataset:for i in range(len(row)):row[i] = (row[i]-means_list[i])/stdevs_list[i] the_standardization_of_our_dataset(dataset,means_list,stdevs_list) print(dataset)

在kaggle數據集上使用特征縮放

from csv import reader# 導入庫 from math import sqrt

數據讀取預處理

def read_csv(the_name_of_file_to_be_read): # 定義數據讀取函數dataset = list()# 定義一個空列表with open(the_name_of_file_to_be_read,"r") as file: # 文件讀取csv_reader = reader(file) # 讀取for row in csv_reader: # 循環(huán)文件內容逐行判斷if not row: # 如果不存在就跳過continue # continue的作用:用來結束本次循環(huán),緊接著執(zhí)行下一次的循環(huán)dataset.append(row) # 把讀取的內容追加到上面定義的空列表中return dataset # 返回列表 def conver_string_to_float(dataset,column): # 字符串轉數字函數dataset = dataset[1:] # 列表切分 保留列表索引1至最后一行for row in dataset: # 循環(huán)數據集row[column]=float(row[column].strip()) # 對每一行中每一列進行變化為浮點類型,去掉空格 the_name_of_file_to_be_read = "bbb.csv" # 數據文件 dataset = read_csv(the_name_of_file_to_be_read) # 讀取數據 for i in range(len(dataset[0])):# 取出一行的長度進行循環(huán)conver_string_to_float(dataset,i)# 調用字符串轉數字函數 print(dataset)# 打印

# 切片去掉字符保留數字 dataset=dataset[1:] dataset

# 編寫函數:在數據集中找到最大值和最小值 def find_the_max_and_min_in_the_dataset(dataset): max_and_min=list() # 定義一個空列表for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)value_max = max(col_values)# 取出每列中最大值value_min = min(col_values) #最小值max_and_min.append([value_max,value_min]) # 追加return max_and_min max_and_min=find_the_max_and_min_in_the_dataset(dataset) max_and_min # 打印每列中的最大最小值

# 計算數據集的平均值 函數 def calculate_the_mean_of_the_dataset(dataset):means = list()for i in range(len(dataset[0])): # 安照列表中第一行的長度進行循環(huán)col_values = [row[i] for row in dataset] # 對每列中的數據進行循環(huán)mean = sum(col_values)/float(len(dataset)) #每一列數據和除以數據個數得出平均值means.append(mean)return means means_list = calculate_the_mean_of_the_dataset(dataset) means_list # 打印每列的平均值

# 計算數據集的標準偏差 def calculate_the_stdevs_of_the_dataset(dataset,means):stdevs = ["占位符" for i in range(len(dataset[0]))]for i in range(len(dataset[0])):# 對列表進行迭代variance = [pow(row[i]-means[i],2) for row in dataset]stdevs[i] = sum(variance)stdevs=[sqrt(element/float(len(dataset)-1)) for element in stdevs] # 偏估計要除以n-1return stdevs stdevs_list = calculate_the_stdevs_of_the_dataset(dataset,means_list) stdevs_list #打印每列的偏差

# 數據集的標準化 def the_standardization_of_our_dataset(dataset,means_list,stdevs_list):for row in dataset:for i in range(len(row)):row[i] = (row[i]-means_list[i])/stdevs_list[i] the_standardization_of_our_dataset(dataset,means_list,stdevs_list) print(dataset) # 標準化后的數據

數據劃分

train_test_split

例子一:

from random import seed from random import randrange # 訓練集,測試集劃分函數 def train_test_split(dataset,train=0.6):# 需要傳入的數據集,切分比例train_lanzi=list()# 創(chuàng)建一個空列表存放訓練集train_size = train*len(dataset) # train的長度就是0.6*數據總長度dataset_copy = list(dataset) # 把原始數據存放在該函數里while len(train_lanzi)<train_size: # 循環(huán) 當train_lanzi小于train_size一直循環(huán)執(zhí)行下面的語句random_choose_some_element = randrange(len(dataset_copy))# 生成指定遞增序列的隨機數長度是數據的長度train_lanzi.append(dataset_copy.pop(random_choose_some_element))# 使用pop函數在dataset_copy中取出random_choose_some_element中的數據追加到train_lanzi列表中return train_lanzi,dataset_copy

測試

dataset = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] train,test = train_test_split(dataset) train,test

#seed()被設置了之后,np,random.random()可以按順序產生一組固定的數組,如果使用相同的seed()值,則每次生成的隨機數都相同 #如果不設置這個值,那么每次生成的隨機數不同。但是,只在調用的時候seed()一下并不能使生成的隨機數相同,需要每次調用都seed()一下,表示種子相同,從而生成的隨機數相同。 seed(20210221) train,test = train_test_split(dataset) train,test

k_fold交叉驗證


常用的是對標注數據集做7:3劃分訓練集和驗證集,只用了一部分數據,且結果很大程度上依賴于選取的數據。
LOOCV(Leave-one-out cross-validation):每次用一個樣本測試,其他數據訓練。計算量太大。
k_fold cv (k-fold cross validation) :把數據分K份,每次留一份進行驗證,k=N時是loocv。得到k個模型取最優(yōu)。
k的選取,過大投入訓練數據太多,極端例子成為loocv,導致每次訓練的數據相關性很大。
過小很難得到較優(yōu)結果

from random import seed from random import randrange # k-fold對訓練集,測試集劃分函數 def k_fold_cross_validation_split(dataset,folds=10):# 需要傳入的數據集,折疊次數basket_for_splitted_data=list()# 創(chuàng)建一個空列表存放折疊好的數據fold_size = int(len(dataset)/folds) # 數據的長度除以折疊的次數 int整數 # 當數據總數除以折疊次數除不盡的時候丟失部分數據dataset_copy = list(dataset) # 把原始數據存放在該函數里for i in range(folds): # 循環(huán)折疊的次數basket_for_random_choosen_fold = list()# 存儲空列表while len(basket_for_random_choosen_fold)<fold_size: # 如果上面存儲列表中的個數小于折疊的次數那么就繼續(xù)循環(huán)random_choose_some_element = randrange(len(dataset_copy))# 對數據進行打亂(生成指定遞增序列的隨機數長度是數據的長度)basket_for_random_choosen_fold.append(dataset_copy.pop(random_choose_some_element)) # 將打亂后的數據 彈出追加到basket_for_random_choosen_fold列表中basket_for_splitted_data.append(basket_for_random_choosen_fold)# 循環(huán)結束后講數據追加回basket_for_splitted_data列表中return basket_for_splitted_data

測試

# 測試 dataset = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] k_folds_split = k_fold_cross_validation_split(dataset,10) k_folds_split

準確度計算代碼實現

簡單準確度

真實正確個數除以判斷正確的個數得到準確率(存在邏輯漏洞)

# 例子 # 正確答案[1,1,1,1,1] # 預測答案[1,1,1,0,0] print("準確度:",3/5)

# 簡易模型準確度函數 # calculate accuracy of precdiction def calculate_the_accuracy_of_precdiction(actual_data,predicted_data): # 傳入實際數據,預測數據correct_num = 0 # 記正確的個數for i in range(len(actual_data)):# 按照數據的長度進行循環(huán)if actual_data[i]==predicted_data[i]: # 如果實際第i個數據等于預測數據的第i個correct_num+=1 # correct_num正確記數就加1return correct_num / float(len(actual_data)) # 預測的正確個數除真實數據個數得出準確值 # 測試 actual_data = [1,1,1,1,1,0,0,0,0,0] predicted_data = [1,1,1,1,1,1,1,1,1,1] accuracy = calculate_the_accuracy_of_precdiction(actual_data,predicted_data) accuracy

混淆矩陣(誤差矩陣)

混淆矩陣也稱誤差矩陣,是表示精度評價的一種標準格式,用n行n列的矩陣形式來表示。具體評價指標有總體精度、制圖精度、用戶精度等,這些精度指標從不同的側面反映了圖像分類的精度。 [1] 在人工智能中,混淆矩陣(confusion matrix)是可視化工具,特別用于監(jiān)督學習,在無監(jiān)督學習一般叫做匹配矩陣。在圖像精度評價中,主要用于比較分類結果和實際測得值,可以把分類結果的精度顯示在一個混淆矩陣里面。混淆矩陣是通過將每個實測像元的位置和分類與分類圖像中的相應位置和分類相比較計算的。






代碼

# 混淆矩陣函數 def confusion_matrix(actual_data,predicted_data): # 混淆矩陣函數 傳入真實值與預測值#### 占位+列表解決第一個特性unique_class_in_data = set(actual_data)# 使用set去掉重復數據matrix = [list() for x in range(len(unique_class_in_data))]# 查看去重后有多少個數據for i in range(len(unique_class_in_data)):matrix[i] = [0 for x in range(len(unique_class_in_data))] # 有多少個數據就是生成X行X列的表格使用0占位 # print(unique_class_in_data) # print(matrix)#### 字典存儲與indexindexing_our_class = dict() # 創(chuàng)建一個空字典來存儲數據for i,class_value in enumerate(unique_class_in_data):indexing_our_class[class_value]=i # 使用循環(huán)給去重后的數據增加索引 # print(indexing_our_class)for i in range(len(actual_data)):# 使用真實數據的長度進行循環(huán)查找數據col = indexing_our_class[actual_data[i]] # 列 真實數據row = indexing_our_class[predicted_data[i]] # 行 預測數據matrix[row][col] += 1 # 將每次查找到的數據放入matrix進程存儲并記錄次數 # print(matrix)return unique_class_in_data,matrix # 調整美化混淆矩陣函數 def pretty_confusion_matrix(unique_class_in_data,matrix): print("(Actual)"+" ".join(str(x) for x in unique_class_in_data))print("(Predicted)----------------------")for i,x in enumerate(unique_class_in_data):print("{}| {}".format(x," ".join(str(x)for x in matrix[i]))) # 測試 actual_data = [0,2,0,0,0,1,1,5,2,1] predicted_data = [2,0,2,0,1,0,5,0,0,1] unique_class_in_data,matrix = confusion_matrix(actual_data,predicted_data) pretty_confusion_matrix(unique_class_in_data,matrix)

回歸誤差

Mean Absolute Error(平均絕對誤差法)

對于回歸問題,最簡單的檢測誤差方法就是:Mean Absolute Error(平均絕對誤差法),以下為公式:

$MAE = \frac{\sum \limits_{i=1}^n \left | predicted_i -actual_i \right|}{total \, prediction} $


例子:

abs(1+1),abs(5-10),abs(1-1)# abs() 函數返回數字的絕對值

actual_data =[1,2,3,4,5,2,3,4] predicted_data=[2,4,3,5,4,1,3,4] (abs(2-1)+abs(4-2)+abs(3-3)+abs(5-4)+abs(4-5)+abs(1-2)+abs(3-3)+abs(4-4))/8


我們通過Python實現以上公式

# 平均絕對誤差函數 def calculate_the_MAE(predicted_data,actual_data): # 傳入預測數據,實際數據the_sum_of_error=0 # 最開始誤差的和為0通過下面計算不停增加for i in range(len(actual_data)):# 依次對數據的長度進行遍歷the_sum_of_error += abs(predicted_data[i]-actual_data[i]) # 每個預測值減去實際值的結果相加MAE=the_sum_of_error/float(len(actual_data)) # 結果除以數據個數return MAE

利用數據檢測結果

actual_data =[1,2,3,4,5,2,3,4] predicted_data=[2,4,3,5,4,1,3,4]Mean_Absolute_Error=calculate_the_MAE(predicted_data,actual_data) print(Mean_Absolute_Error)


但是MAE的方法可能會有分類討論的情況,我們一般不太用。我們可以用Root Mean Squared Error

Root Mean Squared Error(均方根誤差)

# 公式 $RMSE=\sqrt\frac{\sum \limits_{i=1}^n(predicted_i - actual_i)^2}{total \, prediction}$


例子:

actual_data =[1,2,3,4,5,2,3,4,10] predicted_data=[2,4,3,5,4,1,3,4,2] a = ((2-1)**2)+((4-2)**2)+((3-3)**2)+((5-4)**2)+((4-5)**2)+((1-2)**2)+((3-3)**2)+((4-4)**2+(2-10)**2) sqrt(a/9.0)


函數代碼:

# 均方根誤差函數編寫 from math import sqrt # 從math即數學庫中導入用于開根運算的方法sqrt def calculate_the_RMSE(predicted_data,actual_data):the_sum_of_error=0for i in range(len(actual_data)):prediction_error=predicted_data[i]-actual_data[i] # 循環(huán)遍歷預測值和真實值相減的結果the_sum_of_error += (prediction_error**2) # 預測值和真實值相減的結果的平方RMSE=sqrt(the_sum_of_error/float(len(actual_data))) # 預測值和真實值相減的結果的平方除以數據個數的開根運算return RMSE actual_data =[1,2,3,4,5,2,3,4,10] predicted_data=[2,4,3,5,4,1,3,4,2] RMSE=calculate_the_RMSE(predicted_data,actual_data) print(RMSE)

簡易隨機預測基準模型建立

Whether the prediction for a given algorithm are good or not? 給定算法的預測是否良好?

分類問題

Baseline Models: 基準模型

Random Prediction Algorithm:隨機預測算法:
1.Find unique output values from training data 1.從訓練數據中找出唯一的輸出值
2.Randomly select output from the unique output set 2.從唯一輸出集中隨機選擇輸出

from random import seed from random import randrangedef Random_Prediction_Algorithm(traning_data,testing_data):values=[row[-1] for row in traning_data] # 將訓練數據循環(huán)放入values中從最后一個開始選unique_values=list(set(values)) # 使用set對values中的結果去重Randomly_predicted_data=list() # 隨機預測數據for row in testing_data: #對測試數據進行循環(huán)index=randrange(len(unique_values)) # index的長度為去重后的unique_values長度Randomly_predicted_data.append(unique_values[index])# 在去重后的unique_values中通過index方法隨機選取并追加到Randomly_predicted_data中return Randomly_predicted_data # 返回最終結果 # 測試 seed(8888888888) # 使用seed控制隨機 traning_data=[[0],[0],[0],[0],[0],[0],[0],[0],[0],[1]]# 訓練數據中只有0和1兩類 testing_data=[[None],[None],[None],[None],[None]] # 通過函數隨機生成0 or 1的數據predictions=Random_Prediction_Algorithm(traning_data,testing_data) print(predictions)

在該模型中我們0有90%1只有1% 最后得到的記過1卻比0多

ZeroR(Zero Rule) Algorithm

ZeroR(Zero Rule) Algorithm
9 [0] and 1[1]: #數據中有 90%是0和1%是1 # 前置條件

  • If we use the Random Prediction Algorithm: ((0.90.9)+(0.10.1))*100=82%
  • If we use ZeroR Algorithm , our prediction is 0 : 9/10=90%
  • from random import seed from random import randrangedef ZeroR_Algorithm_classification(traning_data,testing_data):values=[row[-1] for row in traning_data]highest_count=max(set(values),key=values.count)# 選取出values中最多的數字ZeroR_prediction=[highest_count for i in range(len(testing_data))] # 將highest_count填充進test數據中長度為testing_data的長度return ZeroR_prediction # 返回填充結果 # 測試 seed(888) traning_data=[[0],[0],[0],[0],[0],[0],[0],[0],[0],[1]] testing_data=[[None],[None],[None],[None],[None]] predictions=ZeroR_Algorithm_classification(traning_data,testing_data) print(predictions)

    線性回歸問題

    Regression: mean

    from random import seed from random import randrange # 建立回歸函數 def ZeroR_Algorithm_regression(traning_data,testing_data):values=[row[-1] for row in traning_data] # 對測試數據進行迭代prediction=sum(values)/float(len(values)) # 使用測試數據總和除以數據個數ZeroR_prediction=[prediction for i in range(len(testing_data))] # 把均值按照測試數據的長度填充return ZeroR_prediction # 測試 seed(888) traning_data=[[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]] testing_data=[[None],[None],[None],[None],[None],[None],[None],[None],[None],[None]]prediciton=ZeroR_Algorithm_regression(traning_data,testing_data) print(prediciton)

    總結

    以上是生活随笔為你收集整理的从零开始数据科学与机器学习算法-数据预处理与基准模型-01的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。