Predicting chemical property (Boiling Point) from a SMILES string I was trying to develop a model for predicting Boiling Points (BP) given a chemical name. One good and unique (ok, almost) way to encode a name is the SMILES notation string. The details of the notation are a bit complex ( see here)
 e.g. 
 Name     Smiles  BP
 Benzene c1ccccc1 80
 Propane CCC      -42
 Ethanol CCO      78
 Phenol  c1ccc(cc1)O  181
 ....

I was wondering if I might be able to extract features from the Smiles String and use it to predict BP's. A large training data set (~10,000 compounds) is already available. One tricky point may be that the notation is case sensitive and various parenthesis have a topological meaning (branching) in there and also certain symbols (= for a double bond, # for a triple bond)
Traditionally the chemical literature uses group contribution methods but those depend on either a human or some smart code to parse the SMILES strings into its constituent entities (e.g. 3 OH groups, 1 double bond etc.) There are good thumbrules already known e.g. Among all alkanes every extra CH2 group adds so many degrees to the BP etc. OR Alcohols are higher boiling due to hydrogen bonding. But I was wondering if it'd be nicer to let the machine learning algorithm figure these out by itself. 
Any ideas about what methods to use?  Or is this too much to ask of an automated algorithm?
 A: It is a matter of generating features or variables that describe the SMILE representation of a chemical compound. Computational chemistry has proposed good definitions of different chemical descriptors that can be trasnformed into fingerprints. These fingerprints, are vectors of numbers (binary or real) that gives a description of the chemical compound based on the SMILE representation. Once you generate these features, you can start building your classification or regression model using the common known methods.
In order to generate these fingerprints (features), some nice chemoinformatics toolkits are there such as RDKit and OpenBabel. For example, as illustrated on the online documentation page of RDKit, you can create some features using the following simple Python code, after importing the right packages:

ms = Chem.MolFromSmiles('c1ccc(cc1)O')fps = FingerprintMols.FingerprintMol(ms)

Some of the features for c1ccc(cc1)O will be:0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 0
You continue generating these features including others (which are based on different definitions such as MACCS keys) available in the toolkit for every compound. Then, you start building a regression model to predict the boiling points for every compound. In a sense it is true that these generated features might not necessarily reflect the chemical properties reflected by a bioling point. Nevertheless, it worths trying !!
A: Very interesting topic. Here are my 2ct:


*

*as we already know that various groups influence the boiling point, I think it would make sense to put this knowledge into features the algorithm can use (like feature generation for image analysis). It may be much easier to improve the estimates that are available from such predefined features than learning without any guidance how to generate meaningful input.

*Coding features like alkyl chain length, various functional groups etc. may give you an idea what kind of algorithm would be suitable, because you need a method that can cover this kind of complexity.  

*The choice of method will depend on your aim: prediction only or also description (i.e. do you also want to learn/interprete what the model uses to calculate boiling point)?

*The easy rules for estimating boiling point are similar to decision trees. So maybe decision trees (random forest) with regression in the leaves would be a starting point.

*In other respects, the rules would formulate differences compared to another substance, which would maybe more similar to e.g. artificial neural networks (e.g. a node "cis double bond" would lower the bp, and this lowering would be added up together with the output of other "functional group" nodes). The decision tree would build a completely different regression for saturated and unsaturated substances. 
