<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 如何使用Python從頭開始擴展機器學習數據 > 原文: [https://machinelearningmastery.com/scale-machine-learning-data-scratch-python/](https://machinelearningmastery.com/scale-machine-learning-data-scratch-python/) 許多機器學習算法都希望數據能夠一致地進行縮放。 在為機器學習擴展數據時,您應該考慮兩種常用方法。 在本教程中,您將了解如何重新調整數據以進行機器學習。閱讀本教程后,您將了解: * 如何從頭開始標準化您的數據。 * 如何從頭開始標準化您的數據。 * 何時進行標準化而不是標準化數據。 讓我們開始吧。 * **更新Feb / 2018** :修復了最小/最大代碼示例中的小錯字。 * **更新Mar / 2018** :添加了備用鏈接以下載數據集,因為原始圖像已被刪除。 * **更新Aug / 2018** :經過測試和更新,可與Python 3.6配合使用。 ![How To Prepare Machine Learning Data From Scratch With Python](img/32fa1f42f072869aeab7b8fa797cd3db.jpg) 如何使用Python從頭開始準備機器學習數據 照片由 [Ondra Chotovinsky](https://www.flickr.com/photos/-chetta-/5634966046/) ,保留一些權利。 ## 描述 許多機器學習算法期望輸入的規模甚至輸出數據都是等效的。 它可以幫助重量輸入以進行預測的方法,例如線性回歸和邏輯回歸。 在以復雜方式組合加權輸入的方法中實際上需要它,例如在人工神經網絡和深度學習中。 在本教程中,我們將練習以CSV格式重新縮放一個標準機器學習數據集。 具體來說,Pima Indians數據集。它包含768行和9列。文件中的所有值都是數字,特別是浮點值。我們將首先學習如何加載文件,然后學習如何將加載的字符串轉換為數值。 您可以在 [UCI機器學習庫](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)上了解有關此數據集的更多信息(更新:[從此處下載](https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv))。 ## 教程 本教程分為3個部分: 1. 規范化數據。 2. 標準化數據。 3. 何時標準化和標準化。 這些步驟將為您處理擴展自己的數據提供所需的基礎。 ### 1.規范化數據 歸一化可以根據上下文引用不同的技術。 這里,我們使用規范化來指示將輸入變量重新縮放到0到1之間的范圍。 規范化要求您知道每個屬性的最小值和最大值。 如果您對問題域有深入了解,可以從訓練數據中估算或直接指定。 您可以通過枚舉值輕松估算數據集中每個屬性的最小值和最大值。 下面的代碼片段定義了 **dataset_minmax()**函數,該函數計算數據集中每個屬性的最小值和最大值,然后返回這些最小值和最大值的數組。 ```py # Find the min and max values for each column def dataset_minmax(dataset): minmax = list() for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] value_min = min(col_values) value_max = max(col_values) minmax.append([value_min, value_max]) return minmax ``` 我們可以設計一個小數據集進行測試,如下所示: ```py x1 x2 50 30 20 90 ``` 有了這個設計的數據集,我們可以測試我們的函數來計算每列的最小值和最大值。 ```py # Find the min and max values for each column def dataset_minmax(dataset): minmax = list() for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] value_min = min(col_values) value_max = max(col_values) minmax.append([value_min, value_max]) return minmax # Contrive small dataset dataset = [[50, 30], [20, 90]] print(dataset) # Calculate min and max for each column minmax = dataset_minmax(dataset) print(minmax) ``` 運行該示例將生成以下輸出。 首先,數據集以列表格式列表打印,然后每列的最小值和最大值以 **column1:min,max和column2:min,max** 的格式打印。 例如: ```py [[50, 30], [20, 90]] [[20, 50], [30, 90]] ``` 一旦我們估計了每列的最大和最小允許值,我們現在可以將原始數據標準化為0和1的范圍。 規范化列的單個值的計算是: ```py scaled_value = (value - min) / (max - min) ``` 下面是一個名為 **normalize_dataset()**的函數的實現,它對提供的數據集的每一列中的值進行標準化。 ```py # Rescale dataset columns to the range 0-1 def normalize_dataset(dataset, minmax): for row in dataset: for i in range(len(row)): row[i] = (row[i] - minmax[i][0]) / (minmax[i][1] - minmax[i][0]) ``` 我們可以將此函數與 **dataset_minmax()**函數結合使用,并對設計的數據集進行規范化。 ```py # Find the min and max values for each column def dataset_minmax(dataset): minmax = list() for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] value_min = min(col_values) value_max = max(col_values) minmax.append([value_min, value_max]) return minmax # Rescale dataset columns to the range 0-1 def normalize_dataset(dataset, minmax): for row in dataset: for i in range(len(row)): row[i] = (row[i] - minmax[i][0]) / (minmax[i][1] - minmax[i][0]) # Contrive small dataset dataset = [[50, 30], [20, 90]] print(dataset) # Calculate min and max for each column minmax = dataset_minmax(dataset) print(minmax) # Normalize columns normalize_dataset(dataset, minmax) print(dataset) ``` 運行此示例將打印下面的輸出,包括規范化數據集。 ```py [[50, 30], [20, 90]] [[20, 50], [30, 90]] [[1, 0], [0, 1]] ``` 我們可以將此代碼與用于加載CSV數據集的代碼相結合,并加載和規范化Pima Indians糖尿病數據集。 從 [UCI機器學習庫](https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)下載Pima Indians數據集,并將其放在當前目錄中,名稱為 **pima-indians-diabetes.csv** (更新:[從此處下載](https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv) **)**。打開文件并刪除底部的任何空行。 該示例首先加載數據集,并將每列的值從字符串轉換為浮點值。從數據集估計每列的最小值和最大值,最后,對數據集中的值進行標準化。 ```py from csv import reader # Load a CSV file def load_csv(filename): file = open(filename, "rb") lines = reader(file) dataset = list(lines) return dataset # Convert string column to float def str_column_to_float(dataset, column): for row in dataset: row[column] = float(row[column].strip()) # Find the min and max values for each column def dataset_minmax(dataset): minmax = list() for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] value_min = min(col_values) value_max = max(col_values) minmax.append([value_min, value_max]) return minmax # Rescale dataset columns to the range 0-1 def normalize_dataset(dataset, minmax): for row in dataset: for i in range(len(row)): row[i] = (row[i] - minmax[i][0]) / (minmax[i][1] - minmax[i][0]) # Load pima-indians-diabetes dataset filename = 'pima-indians-diabetes.csv' dataset = load_csv(filename) print('Loaded data file {0} with {1} rows and {2} columns').format(filename, len(dataset), len(dataset[0])) # convert string columns to float for i in range(len(dataset[0])): str_column_to_float(dataset, i) print(dataset[0]) # Calculate min and max for each column minmax = dataset_minmax(dataset) # Normalize columns normalize_dataset(dataset, minmax) print(dataset[0]) ``` 運行該示例將生成以下輸出。 在標準化之前和之后打印數據集中的第一條記錄,顯示縮放的效果。 ```py Loaded data file pima-indians-diabetes.csv with 768 rows and 9 columns [6.0, 148.0, 72.0, 35.0, 0.0, 33.6, 0.627, 50.0, 1.0] [0.35294117647058826, 0.7437185929648241, 0.5901639344262295, 0.35353535353535354, 0.0, 0.5007451564828614, 0.23441502988898377, 0.48333333333333334, 1.0] ``` ### 2.標準化數據 標準化是一種重新縮放技術,它指的是將數據分布的中心值0和標準偏差定義為值1。 總之,平均值和標準偏差可用于總結正態分布,也稱為高斯分布或鐘形曲線。 它要求在縮放之前知道每列的值的平均值和標準偏差。與上面的規范化一樣,我們可以根據訓練數據估算這些值,或使用領域知識來指定它們的值。 讓我們從創建函數開始,估算數據集中每列的均值和標準差統計量。 均值描述了數字集合的中間或中心趨勢。列的平均值計算為列的所有值之和除以值的總數。 ```py mean = sum(values) / total_values ``` 以下名為 **column_means()**的函數計算數據集中每列的平均值。 ```py # calculate column means def column_means(dataset): means = [0 for i in range(len(dataset[0]))] for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] means[i] = sum(col_values) / float(len(dataset)) return means ``` 標準偏差描述了平均值的平均值。它可以計算為每個值與平均值之間的平方差之和的平方根,并除以值的數量減1。 ```py standard deviation = sqrt( (value_i - mean)^2 / (total_values-1)) ``` 以下名為 **column_stdevs()**的函數計算數據集中每列的值的標準偏差,并假設已經計算了均值。 ```py # calculate column standard deviations def column_stdevs(dataset, means): stdevs = [0 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(x/(float(len(dataset)-1))) for x in stdevs] return stdevs ``` 同樣,我們可以設計一個小數據集來演示數據集的均值和標準差的估計值。 ```py x1 x2 50 30 20 90 30 50 ``` 使用Excel電子表格,我們可以估算每列的平均值和標準差,如下所示: ```py x1 x2 mean 33.3 56.6 stdev 15.27 30.55 ``` 使用人為的數據集,我們可以估計匯總統計數據。 ```py from math import sqrt # calculate column means def column_means(dataset): means = [0 for i in range(len(dataset[0]))] for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] means[i] = sum(col_values) / float(len(dataset)) return means # calculate column standard deviations def column_stdevs(dataset, means): stdevs = [0 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(x/(float(len(dataset)-1))) for x in stdevs] return stdevs # Standardize dataset dataset = [[50, 30], [20, 90], [30, 50]] print(dataset) # Estimate mean and standard deviation means = column_means(dataset) stdevs = column_stdevs(dataset, means) print(means) print(stdevs) ``` 執行該示例提供以下輸出,與電子表格中計算的數字相匹配。 ```py [[50, 30], [20, 90], [30, 50]] [33.333333333333336, 56.666666666666664] [15.275252316519467, 30.550504633038933] ``` 計算摘要統計信息后,我們可以輕松地標準化每列中的值。 標準化給定值的計算如下: ```py standardized_value = (value - mean) / stdev ``` 下面是一個名為 **standardize_dataset()**的函數,它實現了這個等式 ```py # standardize dataset def standardize_dataset(dataset, means, stdevs): for row in dataset: for i in range(len(row)): row[i] = (row[i] - means[i]) / stdevs[i] ``` 將此與用于估計均值和標準差匯總統計量的函數相結合,我們可以標準化我們設計的數據集。 ```py from math import sqrt # calculate column means def column_means(dataset): means = [0 for i in range(len(dataset[0]))] for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] means[i] = sum(col_values) / float(len(dataset)) return means # calculate column standard deviations def column_stdevs(dataset, means): stdevs = [0 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(x/(float(len(dataset)-1))) for x in stdevs] return stdevs # standardize dataset def standardize_dataset(dataset, means, stdevs): for row in dataset: for i in range(len(row)): row[i] = (row[i] - means[i]) / stdevs[i] # Standardize dataset dataset = [[50, 30], [20, 90], [30, 50]] print(dataset) # Estimate mean and standard deviation means = column_means(dataset) stdevs = column_stdevs(dataset, means) print(means) print(stdevs) # standardize dataset standardize_dataset(dataset, means, stdevs) print(dataset) ``` 執行此示例將生成以下輸出,顯示設計數據集的標準化值。 ```py [[50, 30], [20, 90], [30, 50]] [33.333333333333336, 56.666666666666664] [15.275252316519467, 30.550504633038933] [[1.0910894511799618, -0.8728715609439694], [-0.8728715609439697, 1.091089451179962], [-0.21821789023599253, -0.2182178902359923]] ``` 同樣,我們可以演示機器學習數據集的標準化。 下面的示例演示了如何加載和標準化Pima Indians糖尿病數據集,假設它在當前工作目錄中,如前面的標準化示例中所示。 ```py from csv import reader from math import sqrt # Load a CSV file def load_csv(filename): file = open(filename, "rb") lines = reader(file) dataset = list(lines) return dataset # Convert string column to float def str_column_to_float(dataset, column): for row in dataset: row[column] = float(row[column].strip()) # calculate column means def column_means(dataset): means = [0 for i in range(len(dataset[0]))] for i in range(len(dataset[0])): col_values = [row[i] for row in dataset] means[i] = sum(col_values) / float(len(dataset)) return means # calculate column standard deviations def column_stdevs(dataset, means): stdevs = [0 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(x/(float(len(dataset)-1))) for x in stdevs] return stdevs # standardize dataset def standardize_dataset(dataset, means, stdevs): for row in dataset: for i in range(len(row)): row[i] = (row[i] - means[i]) / stdevs[i] # Load pima-indians-diabetes dataset filename = 'pima-indians-diabetes.csv' dataset = load_csv(filename) print('Loaded data file {0} with {1} rows and {2} columns').format(filename, len(dataset), len(dataset[0])) # convert string columns to float for i in range(len(dataset[0])): str_column_to_float(dataset, i) print(dataset[0]) # Estimate mean and standard deviation means = column_means(dataset) stdevs = column_stdevs(dataset, means) # standardize dataset standardize_dataset(dataset, means, stdevs) print(dataset[0]) ``` 運行該示例將打印數據集的第一行,首先以加載的原始格式打印,然后標準化,這樣我們就可以看到差異以進行比較。 ```py Loaded data file pima-indians-diabetes.csv with 768 rows and 9 columns [6.0, 148.0, 72.0, 35.0, 0.0, 33.6, 0.627, 50.0, 1.0] [0.6395304921176576, 0.8477713205896718, 0.14954329852954296, 0.9066790623472505, -0.692439324724129, 0.2038799072674717, 0.468186870229798, 1.4250667195933604, 1.3650063669598067] ``` ### 3.何時標準化和標準化 標準化是一種縮放技術,假設您的數據符合正態分布。 如果給定的數據屬性正常或接近正常,則這可能是要使用的縮放方法。 記錄標準化過程中使用的摘要統計信息是一種很好的做法,這樣您可以在將來可能希望與模型一起使用的數據標準化時應用它們。 規范化是一種不采用任何特定分布的縮放技術。 如果您的數據不是正態分布的,請在應用機器學習算法之前考慮對其進行標準化。 優良作法是記錄標準化過程中使用的每個列的最小值和最大值,如果您需要在將來規范化新數據以與模型一起使用。 ## 擴展 您可以應用許多其他數據轉換。 數據轉換的想法是最好地將數據中的問題結構暴露給學習算法。 可能尚不清楚需要提前進行哪些轉換。試驗和錯誤以及探索性數據分析(圖表和統計數據)的組合可以幫助梳理出可行的方法。 以下是您可能需要考慮研究和實施的一些其他變換: * 允許可配置范圍的標準化,例如-1到1和更多。 * 標準化,允許可配置的傳播,例如平均值的1,2或更多標準偏差。 * 指數變換,如對數,平方根和指數。 * 功率變換(例如box-cox)用于修復正態分布數據中的偏斜。 ## 評論 在本教程中,您了解了如何從頭開始重新調整數據以進行機器學習。 具體來說,你學到了: * 如何從頭開始標準化數據。 * 如何從頭開始標準化數據。 * 何時對數據使用規范化或標準化。 您對擴展數據或此帖子有任何疑問嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看