From a716ea0213646478773ed7dcd3111d30b3cb1d51 Mon Sep 17 00:00:00 2001 From: Lillian Weng Date: Tue, 19 Mar 2024 23:39:40 -0700 Subject: [PATCH] fix explanation for a2 --- docs/Data-100-Debugging-Guide.pdf | Bin 135816 -> 136445 bytes docs/projA2/projA2.html | 2 +- docs/search.json | 2 +- projA2/projA2.md | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Data-100-Debugging-Guide.pdf b/docs/Data-100-Debugging-Guide.pdf index 8666809d8ba17339f295e2d8bbecde41c97c4833..07741ae9a2da5984ac27eb5c1d55a96028c85a90 100644 GIT binary patch delta 32978 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 U6qb>hnUjSDmXuUfUJUmC0U_vUOaK4? diff --git a/docs/projA2/projA2.html b/docs/projA2/projA2.html index 386ff13..a0a7500 100644 --- a/docs/projA2/projA2.html +++ b/docs/projA2/projA2.html @@ -296,7 +296,7 @@

Check that your helper functions always end with a return statement and that the result is expected!
  • pandasinplace= argument allows us to simplify code; instead of reassigning df = df.an_operation(inplace=False), you can choose to shorten the operation as df.an_operation(inplace=True). Note that any inplace=True argument modifies the DataFrame and returns nothing (read more about it in this stack overflow post). Both df = df.an_operation(inplace=True) and df.an_operation(inplace=True).another_operation() will result in this TypeError.
  • -

    We suggest adding print statements to your function to find the None values.

    +

    Check the return type of all functions you end up using. For example, np.append(arr_1, arr_2) returns a NumPy array. In contrast, Python’s .append function mutates the iterable and returns None. If you are unsure of what data type is being returned, looking up the documentation of the function , adding print statements, using type(some_function(input) are all useful ways to debug your code.

    diff --git a/docs/search.json b/docs/search.json index f40ea9a..97b7dbb 100644 --- a/docs/search.json +++ b/docs/search.json @@ -228,7 +228,7 @@ "href": "projA2/projA2.html#questions-5d-and-5f", "title": "Project A2 Common Questions", "section": "Questions 5d and 5f", - "text": "Questions 5d and 5f\n\nGeneral Debugging Tips\nQuestion 5 is a challenging question that mirrors a lot of data science work in the real world: cleaning, exploring, and transforming data; fitting a model, working with a pre-defined pipeline and evaluating your model’s performance. Here are some general debugging tips to make the process easier:\n\nSeparate small tasks into helper functions, especially if you will execute them multiple times. For example, a helper function that one-hot encodes a categorical variable may be helpful as you could perform it on multiple such columns. If you’re parsing a column with RegEx, it also might be a good idea to separate it to a helper function. This allows you to verify that you’re not making errors in these small tasks and prevents unknown bugs from appearing.\nFeel free to make new cells to play with the data! As long as you delete them afterward, it will not affect the autograder.\nThe feature_engine_final function looks daunting at first, but start small. First, try and implement a model with a single feature to get familiar with how the pipeline works, then slowly experiment with adding one feature at a time and see how that affects your training RMSE.\n\n\n\nMy training RMSE is low, but my validation/test RMSE is high\nYour model is likely overfitting to the training data and does not generalize to the test set. Recall the bias-variance tradeoff discussed in lecture. As you add more features and make your model more complex, it is expected that your training error will decrease. Your validation and test error may also decrease initially, but if your model is too complex, you end up with high validation and test RMSE.\n\n\n\nTo decrease model complexity, consider visualizing the relationship between the features you’ve chosen with the (Log) Sale Price and removing features that are not highly correlated. Removing outliers can also help your model generalize better and prevent it from fitting to noise in the data. Methods like cross-validation allow you to get a better sense of where you lie along the validation error curve. Feel free to take a look at the code used in Lecture 16 if you’re confused on how to implement cross-validation.\n\n\nValueError: Per-column arrays must each be 1-dimensional\nIf you’re passing the tests for question 5d but getting this error in question 5f, then your Y variable is likely a DataFrame, not a Series. sklearn models like LinearRegression expect X to be a 2D datatype (ie. DataFrame, 2D NumPy array) and Y to be a 1D datatype (ie. Series, 1D NumPy array).\n\n\nKeyError: 'Sale Price'/KeyError: 'Log Sale Price'\nKeyErrors are raised when a column name does not exist in your DataFrame. You could be getting this error because:\n\nThe test set does not contain a \"(Log) Sale Price\" as that’s what we’re trying to predict. Make sure you only reference the \"(Log) Sale Price\" column when working with training data (is_test_set=False).\nYou dropped the \"Sale Price\" column twice in your preprocessing code.\n\n\n\nValue Error: could not convert string to float\nThis error occurs if your final design matric contains non-numeric columns. For example, if you simply run X = data.drop(columns = [\"Log Sale Price\", \"Sale Price\"]), all the non-numeric columns of data are still included in X and you will see this error message. The fit function of a lm.LinearRegression object can take a pandas DataFrame as the X argument, but requires that the DataFrame is only composed of numeric values.\n\n\nValueError: Input X contains infinity or a value too large for dtype('float64')\nThe reason why your X data contains infinity is likely because you are taking the logarithm of 0 somewhere in your code. To prevent this, try:\n\nAdding a small number to the features that you want to perform the log transformation on so that all values are positive and greater than 0. Note that whatever value you add to your train data should also be added to your test data.\nRemoving zeroes before taking the logarithm. Note that this is only possible on the training data as you cannot drop rows from the test set.\n\n\n\nValueError: Input X contains NaN\nThe reason why your design matrix X contains NaN values is likely because you take the log of a negative number somewhere in your code. To prevent this, try:\n\nShifting the range of values for features that you want to perform the logging operation on to positive values greater than 0. Note that whatever value you add to your train data should also be added to your test data.\nRemoving negative values before taking the log. Note that this is only possible on the training data as you cannot drop rows from the test set.\n\n\n\nValueError: The feature names should match those that were passed during fit\nThis error is followed by one or both of the following:\nFeature names unseen at fit time: \n- FEATURE NAME 1\n- FEATURE NAME 2\n ...\n\nFeature names seen at fit time, yet now missing\n- FEATURE NAME 1\n- FEATURE NAME 2\n ...\nThis error occurs if the columns/features you’re passing in for the test dataset aren’t the same as the features you used to train the model. sklearn’s models expect the testing data’s column names to match the training data’s. The features listed under Feature names unseen at fit time are columns that were present in the training data but not the testing data, and features listed under Feature names seen at fit time, yet now missing were present in the testing data but not the training data.\nPotential causes for this error:\n\nYour preprocessing for X is different for training and testing. Double-check your code in feature_engine_final! Besides removing any references to 'Sale Price' and code that would remove rows from the test set, your preprocessing should be the same.\nSome one-hot-encoded categories are present in training but not in testing (or vice versa). For example, let’s say that the feature \"Data100\" has categories “A”, “B”, “C”, and “D”. If “A”, “B”, and “C” are present in the training data, but “B”, “C”, and “D” are present in the testing data, you will get this error:\nThe feature names should match those that were passed during fit. Feature names unseen at fit time: \n- Data100_D\n ...\n\nFeature names seen at fit time, yet now missing\n- Data100_A\n\n\n\nValueError: operands could not be broadcast together with shapes ...\nThis error occurs when you attempt to perform an operation on two NumPy arrays with mismatched dimensions. For example, np.ones(100000) - np.ones(1000000) is not defined since you cannot perform elementwise addition on arrays with different lengths. Use the error traceback to identify which line is erroring, and print out the shape of the arrays on the line before using .shape.\n\n\nTypeError: NoneType is not subscriptable\nThis error occurs when a NoneType variable is being accessed like a class, for example None.some_function(). It may be difficult to identify where the NoneType is coming from, but here are some possible causes:\n\nCheck that your helper functions always end with a return statement and that the result is expected!\npandas’ inplace= argument allows us to simplify code; instead of reassigning df = df.an_operation(inplace=False), you can choose to shorten the operation as df.an_operation(inplace=True). Note that any inplace=True argument modifies the DataFrame and returns nothing (read more about it in this stack overflow post). Both df = df.an_operation(inplace=True) and df.an_operation(inplace=True).another_operation() will result in this TypeError.\n\nWe suggest adding print statements to your function to find the None values." + "text": "Questions 5d and 5f\n\nGeneral Debugging Tips\nQuestion 5 is a challenging question that mirrors a lot of data science work in the real world: cleaning, exploring, and transforming data; fitting a model, working with a pre-defined pipeline and evaluating your model’s performance. Here are some general debugging tips to make the process easier:\n\nSeparate small tasks into helper functions, especially if you will execute them multiple times. For example, a helper function that one-hot encodes a categorical variable may be helpful as you could perform it on multiple such columns. If you’re parsing a column with RegEx, it also might be a good idea to separate it to a helper function. This allows you to verify that you’re not making errors in these small tasks and prevents unknown bugs from appearing.\nFeel free to make new cells to play with the data! As long as you delete them afterward, it will not affect the autograder.\nThe feature_engine_final function looks daunting at first, but start small. First, try and implement a model with a single feature to get familiar with how the pipeline works, then slowly experiment with adding one feature at a time and see how that affects your training RMSE.\n\n\n\nMy training RMSE is low, but my validation/test RMSE is high\nYour model is likely overfitting to the training data and does not generalize to the test set. Recall the bias-variance tradeoff discussed in lecture. As you add more features and make your model more complex, it is expected that your training error will decrease. Your validation and test error may also decrease initially, but if your model is too complex, you end up with high validation and test RMSE.\n\n\n\nTo decrease model complexity, consider visualizing the relationship between the features you’ve chosen with the (Log) Sale Price and removing features that are not highly correlated. Removing outliers can also help your model generalize better and prevent it from fitting to noise in the data. Methods like cross-validation allow you to get a better sense of where you lie along the validation error curve. Feel free to take a look at the code used in Lecture 16 if you’re confused on how to implement cross-validation.\n\n\nValueError: Per-column arrays must each be 1-dimensional\nIf you’re passing the tests for question 5d but getting this error in question 5f, then your Y variable is likely a DataFrame, not a Series. sklearn models like LinearRegression expect X to be a 2D datatype (ie. DataFrame, 2D NumPy array) and Y to be a 1D datatype (ie. Series, 1D NumPy array).\n\n\nKeyError: 'Sale Price'/KeyError: 'Log Sale Price'\nKeyErrors are raised when a column name does not exist in your DataFrame. You could be getting this error because:\n\nThe test set does not contain a \"(Log) Sale Price\" as that’s what we’re trying to predict. Make sure you only reference the \"(Log) Sale Price\" column when working with training data (is_test_set=False).\nYou dropped the \"Sale Price\" column twice in your preprocessing code.\n\n\n\nValue Error: could not convert string to float\nThis error occurs if your final design matric contains non-numeric columns. For example, if you simply run X = data.drop(columns = [\"Log Sale Price\", \"Sale Price\"]), all the non-numeric columns of data are still included in X and you will see this error message. The fit function of a lm.LinearRegression object can take a pandas DataFrame as the X argument, but requires that the DataFrame is only composed of numeric values.\n\n\nValueError: Input X contains infinity or a value too large for dtype('float64')\nThe reason why your X data contains infinity is likely because you are taking the logarithm of 0 somewhere in your code. To prevent this, try:\n\nAdding a small number to the features that you want to perform the log transformation on so that all values are positive and greater than 0. Note that whatever value you add to your train data should also be added to your test data.\nRemoving zeroes before taking the logarithm. Note that this is only possible on the training data as you cannot drop rows from the test set.\n\n\n\nValueError: Input X contains NaN\nThe reason why your design matrix X contains NaN values is likely because you take the log of a negative number somewhere in your code. To prevent this, try:\n\nShifting the range of values for features that you want to perform the logging operation on to positive values greater than 0. Note that whatever value you add to your train data should also be added to your test data.\nRemoving negative values before taking the log. Note that this is only possible on the training data as you cannot drop rows from the test set.\n\n\n\nValueError: The feature names should match those that were passed during fit\nThis error is followed by one or both of the following:\nFeature names unseen at fit time: \n- FEATURE NAME 1\n- FEATURE NAME 2\n ...\n\nFeature names seen at fit time, yet now missing\n- FEATURE NAME 1\n- FEATURE NAME 2\n ...\nThis error occurs if the columns/features you’re passing in for the test dataset aren’t the same as the features you used to train the model. sklearn’s models expect the testing data’s column names to match the training data’s. The features listed under Feature names unseen at fit time are columns that were present in the training data but not the testing data, and features listed under Feature names seen at fit time, yet now missing were present in the testing data but not the training data.\nPotential causes for this error:\n\nYour preprocessing for X is different for training and testing. Double-check your code in feature_engine_final! Besides removing any references to 'Sale Price' and code that would remove rows from the test set, your preprocessing should be the same.\nSome one-hot-encoded categories are present in training but not in testing (or vice versa). For example, let’s say that the feature \"Data100\" has categories “A”, “B”, “C”, and “D”. If “A”, “B”, and “C” are present in the training data, but “B”, “C”, and “D” are present in the testing data, you will get this error:\nThe feature names should match those that were passed during fit. Feature names unseen at fit time: \n- Data100_D\n ...\n\nFeature names seen at fit time, yet now missing\n- Data100_A\n\n\n\nValueError: operands could not be broadcast together with shapes ...\nThis error occurs when you attempt to perform an operation on two NumPy arrays with mismatched dimensions. For example, np.ones(100000) - np.ones(1000000) is not defined since you cannot perform elementwise addition on arrays with different lengths. Use the error traceback to identify which line is erroring, and print out the shape of the arrays on the line before using .shape.\n\n\nTypeError: NoneType is not subscriptable\nThis error occurs when a NoneType variable is being accessed like a class, for example None.some_function(). It may be difficult to identify where the NoneType is coming from, but here are some possible causes:\n\nCheck that your helper functions always end with a return statement and that the result is expected!\npandas’ inplace= argument allows us to simplify code; instead of reassigning df = df.an_operation(inplace=False), you can choose to shorten the operation as df.an_operation(inplace=True). Note that any inplace=True argument modifies the DataFrame and returns nothing (read more about it in this stack overflow post). Both df = df.an_operation(inplace=True) and df.an_operation(inplace=True).another_operation() will result in this TypeError.\n\nCheck the return type of all functions you end up using. For example, np.append(arr_1, arr_2) returns a NumPy array. In contrast, Python’s .append function mutates the iterable and returns None. If you are unsure of what data type is being returned, looking up the documentation of the function , adding print statements, using type(some_function(input) are all useful ways to debug your code." }, { "objectID": "projA2/projA2.html#question-6", diff --git a/projA2/projA2.md b/projA2/projA2.md index 3586330..565c13b 100644 --- a/projA2/projA2.md +++ b/projA2/projA2.md @@ -99,7 +99,7 @@ This error occurs when a `NoneType` variable is being accessed like a class, for * Check that your helper functions always end with a `return` statement and that the result is expected! * `pandas`' `inplace=` argument allows us to simplify code; instead of reassigning `df = df.an_operation(inplace=False)`, you can choose to shorten the operation as `df.an_operation(inplace=True)`. Note that any `inplace=True` argument modifies the `DataFrame` and *returns nothing* (read more about it in [this stack overflow post](https://stackoverflow.com/questions/45570984/in-pandas-is-inplace-true-considered-harmful-or-not)). Both `df = df.an_operation(inplace=True)` and `df.an_operation(inplace=True).another_operation()` will result in this `TypeError`. -We suggest adding print statements to your function to find the `None` values. +Check the return type of all functions you end up using. For example, `np.append(arr_1, arr_2)` returns a `NumPy` array. In contrast, `Python`’s `.append` function mutates the iterable and returns `None`. If you are unsure of what data type is being returned, looking up the documentation of the function , adding print statements, using `type(some_function(input)` are all useful ways to debug your code. ## Question 6